当一个数位数过多时,python就算不动了?
我瞎编了一个程序:
import random
a = random.randint(1,1e100)
b = random.randint(1,1e100)
int((a+b)/2)
就这样。然后你会发现,很明显,python算错了。这是怎么回事呢? 你要 print(int((a+b)/2)) 才能输出 明显? 好像还是不对啊,我刚才试了一下,结果和a是一样的 永恒的蓝色梦想 发表于 2020-7-30 11:06
明显?
就比如说,a的在最后一位是7,b的最后一位也是7,但结果的最后一位是8 程永康 发表于 2020-7-30 11:10
就比如说,a的在最后一位是7,b的最后一位也是7,但结果的最后一位是8
因为浮点数是有误差的,把int((a+b)/2)改成a + b >> 1就可以了。 永恒的蓝色梦想 发表于 2020-7-30 11:14
因为浮点数是有误差的,把改成就可以了。
哇哦!真的好了,谢谢。请问这是什么高妙的手法? 程永康 发表于 2020-7-30 11:17
哇哦!真的好了,谢谢。请问这是什么高妙的手法?
其实就是(a + b) // 2啦,因为是整数除法,不会出现浮点数误差。 永恒的蓝色梦想 发表于 2020-7-30 11:18
其实就是啦,因为是整数除法,不会出现浮点数误差。
明白了,谢谢! 加上了e就代表这是个浮点数,浮点数采用IEEE754标准,这个标准对特别大的数有误差,具体可以参考C/C++交流版块里的子板块里的扩展阅读里浮点数的文章
页:
[1]