Java 创建strictfp类或方法有什么用途?

Java 创建strictfp类或方法有什么用途?,java,floating-point,Java,Floating Point,将一个类标记为strictfp意味着该类中的任何方法代码都将符合IEEE 754浮点标准规则 这意味着什么?我真的不明白。这都是关于精度的问题 IEEE754是浮点计算的技术标准(来自wiki) 如果不使用strictfp,JVM实现可以在可用的地方自由使用额外的精度 对于某些应用程序,程序员可能需要每个平台都具有完全相同的浮点行为,即使在能够处理更高精度的平台上也是如此。但是,如果不需要此精度级别,VM默认情况下不使用中间产品 这一切都是关于精度的 IEEE754是浮点计算的技术标准(来自wi

将一个类标记为strictfp意味着该类中的任何方法代码都将符合IEEE 754浮点标准规则


这意味着什么?我真的不明白。

这都是关于精度的问题

IEEE754是浮点计算的技术标准(来自wiki)

如果不使用strictfp,JVM实现可以在可用的地方自由使用额外的精度

对于某些应用程序,程序员可能需要每个平台都具有完全相同的浮点行为,即使在能够处理更高精度的平台上也是如此。但是,如果不需要此精度级别,VM默认情况下不使用中间产品


这一切都是关于精度的

IEEE754是浮点计算的技术标准(来自wiki)

如果不使用strictfp,JVM实现可以在可用的地方自由使用额外的精度

对于某些应用程序,程序员可能需要每个平台都具有完全相同的浮点行为,即使在能够处理更高精度的平台上也是如此。但是,如果不需要此精度级别,VM默认情况下不使用中间产品


一些处理器具有稍微更精确的算术功能,例如80位而不是64位。同样,在某些处理器上,使用
double
算法可能会更快,即使在逻辑上使用
float
算法的情况下也是如此。例如:

float foo(float x, float y)
{
    x = x * 1.2345f;
    y = y * 2.3456f;
    return x * y;
}
在这里,可以对中间操作进行优化,以便在整个过程中使用80位算术,只有在返回时才返回到32位的值。。。即使源代码中描述的每次乘法的操作理论上是32位乘法


当您使用
strictfp
时,您将关闭这些潜在的优化。这几乎没有必要,但这意味着您可以保证,在给定完全相同的输入集时,相同的算术运算集将给出完全相同的结果集,而不管执行情况如何。

有些处理器具有稍微更精确的算术功能,例如80位而不是64位。同样,在某些处理器上,使用
double
算法可能会更快,即使在逻辑上使用
float
算法的情况下也是如此。例如:

float foo(float x, float y)
{
    x = x * 1.2345f;
    y = y * 2.3456f;
    return x * y;
}
在这里,可以对中间操作进行优化,以便在整个过程中使用80位算术,只有在返回时才返回到32位的值。。。即使源代码中描述的每次乘法的操作理论上是32位乘法


当您使用
strictfp
时,您将关闭这些潜在的优化。这几乎没有必要,但这意味着您可以保证,在给定完全相同的输入集时,相同的算术运算集将给出完全相同的结果集,而不管执行情况如何。

您能给出strictfp类的示例吗?@vijayk:我不知道您的意思。它只是一个类修饰符-类中的其余代码看起来与正常代码完全相同。你能举个strictfp类的例子吗?@vijayk:我不知道你的意思。它只是一个类修饰符——类中的其余代码看起来与普通代码完全相同。