首页 > 解决方案 > Python 3 浮动问题?

问题描述

我试图在 python 3 中进行以下计算:

https://i.stack.imgur.com/f5y7z.png

添加:

https://i.stack.imgur.com/Txoya.png

应该返回 0(图像是用 wolframalpha 制作的)。

当我尝试在 python 中进行相同的计算时:

pow((2*3*5),28)-29*math.floor(pow((2*3*5),28)/29)-1

它返回4303955653455607115022335

每个部分的值是:

228767924549610000000000000000000000000000正确的。

-228767924549609995696044346544392884977665不正确。

我怎样才能解决这个问题?

标签: pythonfloating-pointprecisioncalculationbignum

解决方案


您正在使用精度有限的浮点除法/,因此您的大结果会四舍五入。

相反,您可以使用整数 floor division 获得您想要//的结果,它具有无限精度的整数结果:

import math
pow((2*3*5),28)-29*(pow((2*3*5),28)//29)-1
# 0

推荐阅读