32-bitowych typu całkowitego można obliczyć najwyżej wartość(9 cyfr). Dla liczb 64-bitowych typu całkowitego można maksymalnie obliczyć(20 cyfr).
Dla większych argumentów konieczne jest zastosowanie arytmetyki wielkiej precyzji. W języku Python liczby całkowite mają dowolną precyzję, co umożliwia bezpośrednie obliczanie dużych wartości silni. Przykładowa implementacja ma postać: def silnia(n): s=1 for i in range(2,n+1): s=s*i return s
# Przykład n=1558 wynik = silnia(n) print("Liczba cyfr =", len(str(wynik))) print("n =", n, "silnia =", wynik) Przykładowo, wartość 1558! zawiera około 4300 cyfr:
(w przybliżeniu ).
Dla bardzo dużych wartości n bezpośrednie obliczanie silni staje się nieefektywne lub niemożliwe ze względu na ograniczenia pamięciowe. W takich przypadkach stosuje się metody przybliżone, oparte m.in. na logarytmach oraz funkcji gamma.
Poniższy przykład wykorzystuje bibliotekę mpmath do wyznaczenia liczby cyfr oraz pierwszych cyfr rozwinięcia n!:!pip install mpmath import mpmath import time
# Dane ------------------------------------- n=10**100 # dana liczba m = 10 # ile pierwszych cyfr dokładnych w wyniku
# Konfiguracja precyzji mpmath (liczba cyfr znaczących) mpmath.mp.dps = m + 10 print(f"n={n} - liczenie n!