10.8 什么时候应该在Java中使用“ strictfp”关键字? | Java Debug 笔记

116 阅读1分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>

提问:什么时候应该在Java中使用“ strictfp”关键字?

我已经查看了strictf是做什么的,但是实际上没有人举一个例子说明strictfp何时在Java中使用该关键字。有人真的为此找到了用处吗?

我将其放在我所有的浮点运算中会有副作用吗?

回答1:

Strictfp确保您从每个平台上的浮点计算中获得完全相同的结果。 如果您不使用strictfp,那么可以自由使用JVM实现,以在可用时使用额外的精度。

JLS大佬钦定:

在FP-strict表达式中,所有中间值必须是浮点值集或double值集的元素,这意味着所有FP-strict表达式的结果必须是IEEE 754算术对使用单格式和双格式表示的操作数预测的结果 。 在不受FP限制的表达式中,为实现留出了一定的回旋余地,可以使用扩展的指数范围来表示中间结果。 粗略地说,最终结果是,在独占使用浮点值集或双精度值集可能导致上溢或下溢的情况下,计算仍然可能会产生“正确答案”。

换句话说,这是要确保一次写入一次在任何地方都实际意味着一次写入到错误结果都在任何地方。

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