gpt4 book ai didi

java - 为什么从最大到最小 float 相加不如从最小到最大相加准确?

转载 作者:行者123 更新时间:2023-12-02 02:23:31 24 4
gpt4 key购买 nike

我的 Java 教科书指出,在处理 float 时,从最大到最小相加不如从最小到最大相加准确。然而,他没有继续清楚地解释为什么会出现这种情况。

最佳答案

float 的精度位数有限(float 为 6 位,double 为 15 位)。计算

1.0e20d + 1 

给出结果1.0e20,因为没有足够的精度来表示数字

100,000,000,000,000,000,001

如果您从最大的数字开始,那么任何比 n 个数量级小的数字(其中 n 为 6 或 15,具体取决于类型)将不会对总和。从最小的数字开始,您可能会将几个较小的数字相加,从而影响最终的总数。

例如,它会产生影响的地方

1.0e20 + 1.0e4 + 6.0e4 + 3.0e4

假设它恰好是 15 位十进制数字精度(不是,请参阅下面的链接文章,但 15 对于示例来说已经足够了),如果您从较大的数字开始,则其他数字都不会产生影响,因为它们是太小。如果您从较小的开始,它们加起来为 1.0e5,这足以影响最终的总数。

请阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic

关于java - 为什么从最大到最小 float 相加不如从最小到最大相加准确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48124692/

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