最近,我不得不计算出一个问题,其中包括Python中的置换和阶乘。当P(n,m) =n!/(N)!时,我不得不计算P(24,23) * P(31,18)
from math import factorial
res = factorial(24) / factorial(24 - 23) * factorial(31) / factorial(31 - 18)
print(int(res))这给了我819307862388221490258228866079033329420993560576,,但这不是问题的答案。
res = 1
for i in range((24 - 23 + 1), (24 + 1)):
res *= i
for i in range((31 - 18 + 1), (31 + 1)):
res *= i
print(res)这给了我一个被接受为答案的819307862388221633448919424563251511296000000000,。
我不认为阶乘函数给出了错误的结果,所以我假设差异是因为python计算大数字的方式,或者是由于最后的整数转换。
但我不太确定我需要寻找什么,所以我来到这里。
有人能告诉我为什么计算结果会有这样的差异吗?或者我应该寻找什么来得到我的问题的答案?
发布于 2022-07-27 15:45:14
关于浮点算法,每个计算机科学家应该知道什么?
使用/除法在python中生成一个float,即使这两个操作数都是整数。浮点数不能准确表示所有的数字,因此从操作中得到错误的结果。
若要使用整数除法,请使用//运算符:
res = factorial(24) // factorial(24 - 23) * factorial(31) // factorial(31 - 18)
# gives res = 819307862388221633448919424563251511296000000000https://stackoverflow.com/questions/73139837
复制相似问题