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.
我刚刚阅读了关于 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.