Java-double和float percision是否依赖于机器?

Java-double和float percision是否依赖于机器?,java,Java,我想知道Java是否对浮点数(float和double)使用统一的精度,而不管运行VM的机器体系结构如何。 这是必需的,因为我试图在多台机器上同步一些涉及数学的模拟,我必须确保所有的计算都会在所有机器上产生相同的结果。你会没事的。精度由语言指定。在每个Java平台上都应该是相同的。详细信息见Java具有IEEE 754单精度和双精度类型 换句话说,是的。所有的机器都是一样的 @user2246674规范本身规定了格式(包括精度),但一些“基本”数学函数可能不同()。另外,我不确定像x/y(其中x

我想知道Java是否对浮点数(float和double)使用统一的精度,而不管运行VM的机器体系结构如何。
这是必需的,因为我试图在多台机器上同步一些涉及数学的模拟,我必须确保所有的计算都会在所有机器上产生相同的结果。

你会没事的。精度由语言指定。在每个Java平台上都应该是相同的。详细信息见

Java具有IEEE 754单精度和双精度类型

换句话说,是的。所有的机器都是一样的


@user2246674

规范本身规定了格式(包括精度),但一些“基本”数学函数可能不同()。另外,我不确定像
x/y
(其中x和y是任意浮点/双精度值)这样的东西是否严格保证在任何地方都产生相同的结果。这是一个不同的问题-x/y在JVM中总是返回相同的结果。但是
Math.sin(x)
(例如)可能会根据方法的实现方式返回不同的结果。一般来说,Java规范对于数值的精度非常具体。“严格”的东西只适用于一些理论意义大于实际意义的模糊案例。然而,如果你试图在不同的机器上得到完全相同的结果,并且你使用的是超越函数,那么你应该使用严格的数学而不是数学。您还应该在类上使用
strictfp
修饰符(无论是否使用超越函数)。请注意,出于性能考虑,
Math
类的实现允许有点误入歧途。
stricmath
的实现必须提供与标准发布算法相同的逐位输出。这和数字本身的精确性不一样,因为我自己就知道了,不想让你在这样一个愚蠢的问题上多花时间。但是谢谢你的回答!