为什么我的计算机内置计算器最多只能计算 101 个阶乘,但我的 python 阶乘脚本可以计算得更高?

Why is it that my computers built in calculator can only calculate up to 101 factorial but my python factorial script can go much higher?

我制作了一个 Python 脚本来计算阶乘并用 1000 测试了它!但是当我放1000!进入我的 mac 的内置计算器来检查它的计算结果 returns "Not a number"。我做了一些测试,发现内置计算器最多只能计算 101 个阶乘。这是为什么?

1000对应的数字!比您的计算器用来存储数字的要大。该数字实际上有 2568 位数字,即:

import math


print(len(str(math.factorial(1000))))
# 2568

您的计算器使用预定量的内存来存储单个数字。有几种不同的方法可以将数字存储在给定的位数中。流行的此类方法是 float and int。 假设您的计算器使用 64 位,这些将变为 float64int64,它们可以分别容纳 2 ** 1023 ~ 9e+3072 ** 63 ~ 9223372036854775808

相比之下,Python 整数有 arbitrary precision,这意味着任何任意大的数字(只要您的系统中有可用内存)都将在 Python 中精确表示.

这种选择的最终代价是速度和内存消耗:

  • 与固定精度的操作相比,具有任意精度数字的操作往往会更慢
  • 给定的数字往往需要更多的内存才能以任意精度表示

在某些应用程序中,这些缺点大多无关紧要,而在其他应用程序(例如数值分析)中,它们非常重要。 但不要担心,Python 提供了许多工具和库,可以在需要时使用固定精度数字,其中最突出的可能是 NumPy