Java parsefloat 在每个 CPU 上都有相同的结果

Java parsefloat same result on every CPU

我刚刚阅读了关于 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 修饰符的意思是 class 或方法中的任何表达式都被评估为 FP-strict。

但是,JLS 并没有说如果您在 FP-strict 表达式中调用不同的方法,那么该方法中的计算也会自动成为 FP-strict。

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

反面是(内部)Java class 在 Float.valueOf(String) 中进行转换:

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

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

要查找的 class 是 Java 中的 jdk.internal.math.FloatingDecimal 11.