Python中的错误答案

2024-04-24 11:44:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Python解决这个问题。 (10**22+1)/89给出了这个答案:1.1235955056179775e+20 因此,我使用print语句获取完整的数字“%1.1f”%x,并得到以下数字: 112359550561797750784.0

这就是问题所在。当你把这个答案乘以89,你得不到10^22+1,而是得到99999999999999819776。在hit&trial上玩一下,我得到了正确的答案:112359550561797752809,乘以89得到精确的10^22+1。在

我的问题是,我做错了什么,把答案的最后4位数弄错了?在


Tags: 答案数字语句printtrialhit位数试图用
2条回答

你想打哪个号码?在

如果你使用数学模块,你可以这样做:

import math
e = pow(10, 22) + 1
a = e / 89

这给了我112359550561797752809L

但是如果不知道你想得到哪一个答案,又不想做数学运算,我就无法判断这是否是你想要的。在

这就是浮点数学的工作原理。当你用十进制数把1除以3,你得到

0.3333333333333333...

你必须在某个时候切断它:

^{pr2}$

当你把它乘以3:

0.9999999999999999

你得不到1。舍入误差不可避免地累积起来。这在Python使用的二进制浮点数学中是相同的。即使结果是一个整数(即(10**22+1)/89),浮点表示法也只能保留这么多的数字,因此大数在结尾会失去一定的准确性。在

如果要在整数数学中执行此操作,可以使用//运算符:

>>> ((10**22 + 1) // 89) * 89 == 10**22 + 1
True

如果结果不是整数,//将占用结果的底数:

>>> 5 // 3
1
>>> (5 // 3) * 3
3

与浮点不同,Python的整数表示将保留每个数字。不幸的是,这只适用于整数,因为我们无法将sqrt(2)或pi等数字的每一位都放入有限数量的RAM中。在

相关问题 更多 >