Я строю несколько экспоненциальных функций с различными основаниями против факторной функции.
При переходе к x = 15 все выглядит хорошо, и у нас напряженная гонка:
Однако при увеличении до x = 50 все экспоненциальные функции кажутся расстроенными из-за того, что факториал выиграл гонку, и все они ломаются:
Я сомневаюсь, что это будет переполнением, поскольку я использую dtype=np.longlong
, а значения функций достигают только 10^60
. Более того, функция факториала все еще в порядке.
Есть идеи о том, что может происходить?
Вот код:
import numpy as np
import matplotlib.pyplot as plt
def compare_exponential_factorial(bases, x):
xs = np.arange(0, x, dtype=np.longlong)
fact = []
for x in xs:
fact.append(np.math.factorial(x))
fig, ax = plt.subplots(1,1, figsize=(8,6))
ax.semilogy(xs, fact, label="$f_1 = x!$", color="r")
exps = []
for i, b in enumerate(bases):
exp = np.power(b, xs, dtype=np.longlong)
exps.append(exp)
ax.plot(xs, exp, label=f"$f_{i + 2} = {b}^x$", color="b", alpha=(i + 1) / len(bases))
ax.set_xlabel("x")
ax.set_title("Epic race between Exponentials and Factorial functions", fontsize=14)
ax.legend(loc='best')
plt.show()
if __name__ == "__main__":
compare_exponential_factorial(bases=np.array([2, 3, 4, 5, 8, 10, 15], dtype=np.longlong), x=50)