据我了解,只要您使用相同的指令集和编译器,并且所运行的任何处理器都严格遵守相关标准(即IEEE754),就可以保证获得相同的结果。也就是说,除非您要处理一个特别混乱的系统,否则运行之间的计算中的任何漂移都不太可能导致错误的行为。
我知道的特定陷阱:
某些操作系统允许您以破坏兼容性的方式设置浮点处理器的模式。
浮点中间结果通常在寄存器中使用80位精度,而在存储器中仅使用64位精度。如果以改变函数中寄存器溢出的方式重新编译程序,则与其他版本相比,它可能会返回不同的结果。大多数平台都会为您提供一种强制将所有结果都截断为内存精度的方法。
标准库功能可能会在版本之间更改。我发现在gcc 3 vs 4中有一些并不少见的例子。
IEEE本身允许某些二进制表示形式有所不同……特别是NaN值,但我不记得详细信息。



