Java parsefloat 在每个 CPU 上结果相同

标签 java floating-point floating-accuracy

我刚刚读到了 strictfp ( https://en.wikipedia.org/wiki/Strictfp ) 以及自 Java 1.2 以来浮点/双点运算可能在不同 CPU 上产生不同结果的事实。

现在我想知道 Float.valueOf 方法是否也是如此? 我找不到任何来源。 valueOf 的 javadoc 明确指出:

Note that the round-to-nearest rule also implies overflow and underflow behaviour;

对我来说,这表明如果关闭 strictfp,情况可能会有所不同。

是否有关于该主题的确切消息来源并说明情况是否如此?

最佳答案

Which to me indicates that it may be different if strictfp is turned off.

JLS 表示 strictfp 的含义修饰符是类或方法中的任何表达式都被评估为 FP 严格的。

但是,JLS 并没有说如果您在 FP 严格表达式中调用不同的方法,则该方法中的计算也将自动成为 FP 严格的。

这意味着您从调用 Float.valueOf 获得的结果不依赖于strictfp/调用者的 FP 严格性。

另一面是(内部)Java 类在Float.valueOf(String) 中进行转换。 :

  • 注意对 INF 和 NaN 值使用特定值,
  • 注意确保该值在 javadoc 中规定的错误范围内,并且
  • Float在这种情况下,它会在 double 中进行转换算术。

但是转换方法不是strictfp方法,所以如果代码对 FP 严格性敏感,就会出现问题。

要查找的类是 jdk.internal.math.FloatingDecimal在 Java 11 中。

关于Java parsefloat 在每个 CPU 上结果相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58624665/

相关文章:

java - 使用 Spring Security OAuth2 刷新 token 为 null

java - 上传带有附加信息的多个文件(Spring RestController)

python - 为什么在使用 Python 的 "float"函数时这些结果如此不同?

javascript - 正则表达式 : match known number

javascript - Javascript 有没有办法区分整数和非常接近的小数?

python - 欧拉-马歇罗尼常数

java - SparseMultigraph<V, E> 和 SparseGraph<V, E> 有什么区别?

java - iText - 格式化子字符串

C++: std::remquo 没有给出预期的输出

floating-point - 得出平方根近似值的误差范围