python3 中大数除法不一致
Inconsistency in division of large numbers in python3
当我计算24!使用数学库,结果与 24 不同!除以25计算!到 25 岁。这是为什么?
>>> import math
>>> f=math.factorial(25)
>>> int(f/25)
620448401733239409999872
>>> math.factorial(24)
620448401733239439360000
>>>
/
执行“真除法”。结果是一个浮点数,它没有足够的精度来表示确切的商。调用 int
无法逆转精度损失。浮点数学和舍入中的错误导致了差异。
//
是整数除法——这就是你想要的:
>>> f = math.factorial(25)
>>> f/25
6.204484017332394e+23
>>> int(f/25)
620448401733239409999872
>>> math.factorial(24)
620448401733239439360000
>>> f//25
620448401733239439360000 # correct answer
除法后不能使用/
运算和int()
。此代码将舍入精确的除法。但是当你对 24 使用 factorial
时 python 正在使用 *
操作。
>>> from math import factorial
>>> f25 = factorial(25)
>>> f25
# 620448401733239439360000
这里可以用//
代替/
操作。
see operations explanation here.
>>> f24 = factorial(24)
620448401733239439360000
>>> f25 // 25
620448401733239439360000
当我计算24!使用数学库,结果与 24 不同!除以25计算!到 25 岁。这是为什么?
>>> import math
>>> f=math.factorial(25)
>>> int(f/25)
620448401733239409999872
>>> math.factorial(24)
620448401733239439360000
>>>
/
执行“真除法”。结果是一个浮点数,它没有足够的精度来表示确切的商。调用 int
无法逆转精度损失。浮点数学和舍入中的错误导致了差异。
//
是整数除法——这就是你想要的:
>>> f = math.factorial(25)
>>> f/25
6.204484017332394e+23
>>> int(f/25)
620448401733239409999872
>>> math.factorial(24)
620448401733239439360000
>>> f//25
620448401733239439360000 # correct answer
除法后不能使用/
运算和int()
。此代码将舍入精确的除法。但是当你对 24 使用 factorial
时 python 正在使用 *
操作。
>>> from math import factorial
>>> f25 = factorial(25)
>>> f25
# 620448401733239439360000
这里可以用//
代替/
操作。
see operations explanation here.
>>> f24 = factorial(24)
620448401733239439360000
>>> f25 // 25
620448401733239439360000