可以在不同的处理器上计算浮点数吗? (+在C#和C之间传递双倍数)

我有一个用C#编写的应用程序,它也会调用一些C代码。 C#代码获取一些双重作为输入,对其执行一些计算,将其传递给在其上执行自己计算的本机层,然后传递回C#层。

如果我在不同的机器上运行相同的exe / dll(所有这些都是英特尔的x64),我可能得到的最终结果会在不同的机器上有所不同吗?

如果使用相同的可执行文件,结果应该相同。 但是,值得注意的是,浮点计算通常可通过许多持久性设置(无限模式,舍入模式等)进行高度自定义。 这意味着相同的浮点指令可以根据当前的设置组合产生不同的结果。 如果您的应用程序确保在执行开始时将所有这些设置重置为相同的值,则结果应该相同。 但是,如果某些设置未重置,或依赖于外部参数(如环境变量),则在某些情况下,您最终可能会在不同的计算机上观察到不同的结果。

假设它们实现IEEE浮点运算,硬件本身应该都应该以相同的方式执行它,并且我认为大多数(全部?)都这样做。

http://en.wikipedia.org/wiki/IEEE_754-2008

大多数现代硬件都是标准化的,双重定义也是如此。 您可以通过检查每个变量的内存占用量来检查两者是否使用相同的类型 – 例如sizeof(x)。

还应该是一些在float.h中进行轮询的信息。

从我记忆中来看,int在一致性方面往往更成问题。 有些默认为2个字节,有些默认为4个,但您可以使用long来确保大小。