参考: 二重階乗 - 高精度計算サイト
Nspired Pythonのmath
モジュールにはmath.factorial()
がない。
階乗、二重階乗を計算するための函数を作ってみる。math.gamma()
を使って負数およびfloatまで拡張した。
import math def factorial(n): try: if n%1==0 and n>=0: n = int(n) # 0.0, 1.0, 2.0, ... はintとして計算する。 sute = 1 for i in range(1, n+1): sute *= i return sute else: return math.gamma(n + 1) except: return 9999999999999E999999999999 def factorial2(n): try: if n%1==0 and n>=0: n = int(n) # 0.0, 1.0, 2.0, ... はintとして計算する。 if n%2: k = (n + 1) // 2 return factorial(2 * k) // ((2**k) * factorial(k)) else: k = n // 2 return (2**k) * factorial(k) else: return (2 / math.pi)**((1 - math.cos(math.pi * n)) / 4) * ((2**(n / 2)) * math.gamma(n / 2 + 1)) except: return 9999999999999E999999999999 ######## # test # ######## n = [-3, -2.5, -2, -1.5, -1, -0.5, 0, 1, 2, 3, 4, 5, 10, 10.0, 10.1, 10.2, 10.3] print(list(map(factorial, n))) print(list(map(factorial2, n)))
実行結果:
Wolframによる検算: