【发布时间】:2020-04-15 07:02:42
【问题描述】:
所以我在尝试将浮点数转换为整数时遇到了一个奇怪的问题。我的代码目前如下所示:
from math import gcd
def dostuff(n,m):
L = np.sqrt(n**2+m**2+n*m)
dR = gcd(2*m+n,2*n+m)
atoms=4*L**2/dR
print(atoms)
atoms = int(atoms)
print(atoms)
当我使用 n=4 和 m=4 运行此代码时,第一次打印返回 16.0,而第二次打印返回 15。这是什么原因,我可以做些什么来使第二次返回16 个?
【问题讨论】:
-
您的数字仅比实际的
16.0低一小部分,足以在打印时四舍五入,但在截断时会有所不同。你永远不能指望浮点数是精确的。 四舍五入数字将是直接问题的答案,但我们不知道这是否是您算法的正确答案。 -
检查一下,因为我得到了
15.99999999998和15这是预期的,将浮点数转换为 int 将给出数字的下限 -
这是一个基本的浮点精度问题。它的核心是
np.sqrt(48)**2不等于48,它非常小。