我已经查了这是做什么,但有人实际上有一个例子,当你在Java中使用strictfp关键字?有人真的发现它的用处了吗?

把它放在所有浮点运算上会有什么副作用吗?


当前回答

'strictfp'关键字用于强制Java中的浮点计算(float或double)的精度显式符合IEEE的754标准。如果不使用strictfp关键字,浮点精度取决于目标平台的硬件。

如果接口或类使用strictfp声明,那么该接口或类中的所有方法和嵌套类型都是隐式strictfp。

参考链接

其他回答

strictfp是一个关键字,可以用作类或方法的非非访问修饰符(但不能用作变量)。将类标记为strictfp意味着类中的任何方法代码都将符合IEEE 754浮点标准规则。

如果没有这个修饰符,方法中使用的浮点可能会以依赖于平台的方式运行。有了它,无论JVM运行在哪个底层平台上,您都可以预测浮点数的行为。缺点是,如果底层平台能够支持更高的精度,那么strictfp方法将无法利用它。

如果您没有将一个类声明为strictfp,那么通过将一个方法声明为strictfp,您仍然可以在逐个方法的基础上获得strictfp行为。

~ SCJP Sun®Java™6认证程序员- Kathy Sierra & Bert Bates ~

从Java 17+开始,strictfp修饰符已经过时,没有任何作用。你不应该再使用这个修饰符。

我需要它的一次(也是唯一一次)是与IBM ZSeries进行协调。在会计和大型机之外;不。有一段时间了,但我相当确定大型机没有改变。

Strictfp确保在每个平台上从浮点计算中得到完全相同的结果。如果不使用strictfp, JVM实现可以在可用的地方使用额外的精度。

来自JLS:

Within an FP-strict expression, all intermediate values must be elements of the float value set or the double value set, implying that the results of all FP-strict expressions must be those predicted by IEEE 754 arithmetic on operands represented using single and double formats. Within an expression that is not FP-strict, some leeway is granted for an implementation to use an extended exponent range to represent intermediate results; the net effect, roughly speaking, is that a calculation might produce "the correct answer" in situations where exclusive use of the float value set or double value set might result in overflow or underflow.

换句话说,就是要确保Write-Once-Run-Anywhere实际上意味着write - once - get - equal - wrong - results - everywhere。

使用strictfp,您的结果是可移植的,没有它,它们更可能是准确的。

'strictfp'关键字用于强制Java中的浮点计算(float或double)的精度显式符合IEEE的754标准。如果不使用strictfp关键字,浮点精度取决于目标平台的硬件。

如果接口或类使用strictfp声明,那么该接口或类中的所有方法和嵌套类型都是隐式strictfp。

参考链接