gpt4 book ai didi

math - 为什么 0.1 + 0.4 = 0.5?

转载 作者:行者123 更新时间:2023-12-04 11:33:50 27 4
gpt4 key购买 nike

我们知道floating point is broken ,因为十进制数不能总是完美地用二进制表示。它们被四舍五入为一个可以用二进制表示的数字;有时这个数字更高,有时它更低。在这种情况下,使用无处不在的 IEEE 754 double format 0.1 和 0.4 轮更高:

0.1 = 0.1000000000000000055511151231257827021181583404541015625
0.4 = 0.40000000000000002220446049250313080847263336181640625

由于这两个数字都很高,因此您希望它们的总和也很高。完美加成应该给你 0.5000000000000000277555756156289135105907917022705078125 ,但你会得到一个很好的精确 0.5 .为什么?

问题 Is floating point math broken?上面已经确定了,但是这个问题是不同的。在考虑该问题的答案时,它要求对非直观结果提供更详细的信息。

最佳答案

此计算的行为方式如此,因为加法将结果插入另一个(二进制)数量级。这会在左侧(最重要的一侧)增加一个重要的位,因此必须在右侧(最不重要的一侧)减少一点。

第一个号码,0.1 , 以二进制形式存储为 2^-4 == 1/16 之间的数字和 2^-3 == 1/8 .第二个号码,0.4 , 以二进制形式存储为 2^-2 == 1/4 之间的数字和 2^-1 == 1/2 .总和,0.5 , 是数字 2^-1 == 1/2或者大一点。这是幅度不匹配,可能导致数字丢失。

举个例子,比较容易理解。假设我们正在开发一台十进制计算机,它可以以浮点形式存储四位十进制数字。假设我们要添加数字 10/320/3 .这些可能最终存储为

3.334


6.667

两者都有点高。当我们得到这些数字时,我们预计总和也会有点高,即
10.001

但请注意,我们的结果已经进入了一个新的数量级。完整的结果有五个十进制数字,这不合适。所以计算机将结果四舍五入为四位十进制数字并得到总和
10.00

令人惊讶的是,这是 10/3 + 20/3 的正确答案。 .

我在美国高中的化学和物理课上经常遇到同样的事情。当计算移动到新的数量级时,精度和有效数字会发生奇怪的事情。

关于math - 为什么 0.1 + 0.4 = 0.5?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48374522/

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