当我迭代列表并添加它们时,它给了我一个奇怪的总和

发布于 2025-01-23 16:22:14 字数 212 浏览 0 评论 0原文

a= [8, 12, 11, 15, 12, 2, 16, 3, 6, 19]
mean_a = sum(a)/len(a)
b = list(map(lambda x: x-mean_a, a))

tot = 0
for i in b:
    tot+=i
print(tot**2)

#它给了我这个奇怪的答案:1.262177448353619E-29

a= [8, 12, 11, 15, 12, 2, 16, 3, 6, 19]
mean_a = sum(a)/len(a)
b = list(map(lambda x: x-mean_a, a))

tot = 0
for i in b:
    tot+=i
print(tot**2)

#it gave me this weird answer: 1.262177448353619e-29

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

迷雾森÷林ヴ 2025-01-30 16:22:14

我假设您期待0?如果是这样,这只是A floating-precision Precision Orror ,由于浮点数是由基本2个分数中的计算机处理的。答案有效0;您可以到达一定数量的小数点位置来获取此答案。

sum(a) = 104
len(a) = 10
    
mean_a = 10.4

b = [-2.4000000000000004, 1.5999999999999996, 0.5999999999999996, 4.6, 1.5999999999999996, -8.4, 5.6, -7.4, -4.4, 8.6]

sum(b) = -3.552713678800501e-15

sum(b)**2 = 1.262177448353619e-29

浮点误差发生两次;当您创建b时,当您总结其值时。

I'm assuming you're expecting 0? If so, this is just another case of a floating-point precision error, as floating point numbers are processed by computers in base 2 fractions. The answer is effectively 0; you can round to a certain number of decimal places to get this answer.

sum(a) = 104
len(a) = 10
    
mean_a = 10.4

b = [-2.4000000000000004, 1.5999999999999996, 0.5999999999999996, 4.6, 1.5999999999999996, -8.4, 5.6, -7.4, -4.4, 8.6]

sum(b) = -3.552713678800501e-15

sum(b)**2 = 1.262177448353619e-29

The floating point error occurs twice; when you create b, and when you sum its values.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文