大量的简单计算不匹配。
请参见下面的迭代代码。 r
和r1
以相同的值开头。每个对象在每次迭代中都添加a或b。
令人困惑的是,(a-b)
始终为零,但(r-r1)
却没有经过几次迭代。
出了什么问题?
n = 93
k = 40
r = math.factorial(n) // 2 ** k
r1 = r
for i in range(1, k + 1):
a = 1 * math.factorial(n - i) // 2 ** (k - i)
b = 1.0 * math.factorial(n - i) // 2 ** (k - i)
r += a
r1 += b
print(i, ' r - r1 =', r - r1, ' a - b =', a - b)
人们会期望a-b为零,r-r1也为零。
但是,a-b始终为0,而r-r1则不是。
请参阅下面的代码打印输出。
1 r - r1 = 0.0 a - b = 0.0
2 r - r1 = 0.0 a - b = 0.0
3 r - r1 = 0.0 a - b = 0.0
4 r - r1 = 0.0 a - b = 0.0
5 r - r1 = 1.5760802478557792e+116 a - b = 0.0
6 r - r1 = 1.5760802478557792e+116 a - b = 0.0
7 r - r1 = 1.5760802478557792e+116 a - b = 0.0