我试图用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位数弄错了?在
你想打哪个号码?在
如果你使用数学模块,你可以这样做:
这给了我112359550561797752809L
但是如果不知道你想得到哪一个答案,又不想做数学运算,我就无法判断这是否是你想要的。在
这就是浮点数学的工作原理。当你用十进制数把1除以3,你得到
你必须在某个时候切断它:
^{pr2}$当你把它乘以3:
你得不到1。舍入误差不可避免地累积起来。这在Python使用的二进制浮点数学中是相同的。即使结果是一个整数(即(10**22+1)/89),浮点表示法也只能保留这么多的数字,因此大数在结尾会失去一定的准确性。在
如果要在整数数学中执行此操作,可以使用
//
运算符:如果结果不是整数,
//
将占用结果的底数:与浮点不同,Python的整数表示将保留每个数字。不幸的是,这只适用于整数,因为我们无法将sqrt(2)或pi等数字的每一位都放入有限数量的RAM中。在
相关问题 更多 >
编程相关推荐