提问人:sveri 提问时间:10/30/2019 更新时间:10/30/2019 访问量:100
Java parsefloat 在每个 CPU 上都有相同的结果
Java parsefloat same result on every CPU
问:
我刚刚读到了 strictfp (https://en.wikipedia.org/wiki/Strictfp) 以及自 Java 1.2 以来浮点/双点运算可能会在不同的 CPU 上产生不同的结果这一事实。
现在我想知道方法是否也是如此?
我找不到任何来源。javadoc for 明确指出:Float.valueOf
valueOf
Note that the round-to-nearest rule also implies overflow and underflow behaviour;
对我来说,这表明如果关闭 strictfp,情况可能会有所不同。
是否有关于这个主题的确切消息来源,并指出情况是否如此?
答:
4赞
Stephen C
10/30/2019
#1
对我来说,这表明如果关闭 strictfp,情况可能会有所不同。
JLS 表示,修饰符的含义是类或方法中的任何表达式都被计算为 FP-strict。strictfp
但是,JLS 并没有说,如果在 FP-strict 表达式中调用不同的方法,则该方法中的计算也会自动成为 FP-strict。
这意味着您从调用中获得的结果不依赖于调用方的 FP 严格程度。Float.valueOf
strictfp
另一方面,在以下位置进行转换的(内部)Java 类:Float.valueOf(String)
- 注意对 INF 和 NaN 值使用特定值,
- 注意确保该值在 javadoc 中规定的错误范围内,并且
- 在这种情况下,它以算术进行转换。
Float
double
但是,转换方法不是方法,因此如果代码对 FP 严格性敏感,那么就会有问题。strictfp
要查找的类在 Java 11 中。jdk.internal.math.FloatingDecimal
上一个:浮点数学坏了吗?
评论
Float.valueOf