gpt4 book ai didi

java - 为什么不能总是正确地对两个浮点值求和?

转载 作者:行者123 更新时间:2023-12-01 16:48:37 25 4
gpt4 key购买 nike

如果你问我的话,下面的例子给我的输出是非常奇怪的。这怎么可能?有没有办法正确地将这两个值相加? Float.sum(float a, float b) 也给了我相同的结果。

import java.text.DecimalFormat;

public class HelloWorld {
public static void main(String[] args) {
System.out.println("Sum: " + new DecimalFormat("#").format((1500036225984102400.f + 2000000000.f)));
}
}

输出为:

Sum: 1500036225984102400

当然,我希望这两个值相加,但似乎第二个值被忽略了?

最佳答案

float 的精度是有限的。您可以使用 Math.nextUp 找到可表示的下一个最大数字。方法。例如,您可以使用以下方法找到比第一个操作数下一个最大的数字:

float next = Math.nextUp(1500036225984102400.f);

您可以通过减法或使用 Math.ulp 来获取数字与其下一个最大数字之间的跳跃大小。 ,它告诉您“最后一个单位”的大小,如果您调整最低有效位,数字会增加多少:

float ulp = Math.ulp(1500036225984102400.f);

您会发现这个数字大于2000000000.f:

Math.ulp(1500036225984102400.f) = 137438953472.0
2000000000.0

因此,使用 float 无法比 1500036225984102400.f 更精确地表示两个数字的总和。

关于java - 为什么不能总是正确地对两个浮点值求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45103752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com