Java - 双精度和单精度浮点数精度是否取决于计算机?

3

我想知道Java在运行虚拟机的机器架构上是否使用统一精度来处理浮点数(float和double)。

这是必要的,因为我正在尝试同步涉及多台机器上数学计算的模拟,并且必须确保所有计算在所有机器上产生相同的结果。


2
规范本身规定了IEEE-754 1985格式(包括精度),但是一些“基本”的数学函数可能会有所不同请参考这里的解释)。此外,我不确定x/y(其中x和y是任意浮点/双精度值)这样的表达式是否严格保证在任何地方都产生相同的结果。 - user2246674
1
这是一个不同的问题 - x/y 在所有的 JVM 上都会返回相同的结果。但是 Math.sin(x)(例如)可能会根据方法的实现方式而返回不同的结果。 - assylias
一般来说,Java规范对于数值精度非常具体。"严格"的内容只适用于一些比较偏僻的情况,更多是理论上的兴趣而非实际应用。然而,如果您想在不同的机器上获得完全相同的结果,并且使用了超越函数,那么您应该使用StrictMath而不是Math。此外,无论是否使用超越函数,您还应该在类上使用strictfp修饰符。 - Hot Licks
2个回答

6

3
注意,为了提高性能,Math类的实现可能会稍微离开标准算法。而StrictMath类的实现必须完全按照标准发布的算法输出结果,这与数字本身的精确度不同。 - Dawood ibn Kareem
因为我自己已经弄明白了,不想让你浪费时间在这样一个愚蠢的问题上。但还是谢谢你的回答! - Vladimir Gazbarov

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接