Python 精准处理

Python precision handling

我只是想知道为什么这两张印刷品的输出不同。我想计算 Eulers Totient Func。 对于未来,如果有人能告诉我如何 python 处理大数字(60+ 位)以及如何使用它们,那就太好了。

谢谢

import math
a = (math.pow(19,6)-math.pow(19,5))
b = (math.pow(53,4)-math.pow(53,3))
c = (36)
d = (math.pow(101,3)-math.pow(101,2))
print(a)
print(b)
print(c)
print(d)
y= int(a)*int(d)*int(c)*int(b)
print(int(y))
print(int(a*b*c*d))

输出是:

44569782.0
7741604.0
36
1020100.0
12671169797620641340800
12671169797620641038336

我认为这是由于大数的浮点错误造成的。对于整数,使用内置的 pow** 运算符而不是 math.pow。因为 pow** return 整数,显式转换为整数是不必要的。此外,不需要变量周围的括号并降低可读性:

a = 19 ** 6 - 19 ** 5
b = 53 ** 4 - 53 ** 3
c = 36
d = 101 ** 3 - 101 ** 2
print(a)
print(b)
print(c)
print(d)
y = a * b * c * d
print(y)
print(int(a * b * c * d))

44569782
7741604
36
1020100
12671169797620641340800
12671169797620641340800