gpt4 book ai didi

python - python中的舍入错误

转载 作者:行者123 更新时间:2023-11-28 19:30:48 25 4
gpt4 key购买 nike

为什么乘法的顺序会影响结果?考虑以下代码

a=47.215419672114173
b=-0.45000000000000007
c=-0.91006620964286644
result1=a*b*c
temp=b*c
result2=a*temp
result1==result2

我们都知道result1 应该等于 result2,但是我们得到:

result1==result2 #FALSE!

差异很小

result1-result2 #3.552713678800501e-15

但是,对于特定的应用程序,此错误可能会放大,因此执行相同计算的两个程序(一个使用 result1,另一个使用 result2)的输出可能完全不同。

为什么会这样以及如何解决大量数字/科学应用中的此类问题?

谢谢!

更新

很好的答案,但我仍然想念为什么乘法的顺序很重要的原因,例如

temp2=a*b
result3=temp2*c
result1==result3 #True

所以看起来编译器/解释器将 a*b*c 视为 (a*b)*c

最佳答案

在将 float 从十进制表示形式转换为二进制表示形式时,所有编程语言都会失去精度。这会导致计算不准确(至少从基数 10 的角度来看,因为数学实际上是在以二进制表示的浮点值上完成的),包括运算顺序改变结果的情况。大多数语言都提供一种数据结构来保持以 10 为基数的精度,但会牺牲性能。查看 Python 中的 Decimal

编辑:

不完全是为了回答您的更新。计算机按顺序做事,因此当您向它们提供一系列操作时,它们会按顺序逐一进行。除了顺序命令处理之外,没有明确的操作顺序。

关于python - python中的舍入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11638698/

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