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

标签 python python-3.x macos factorial

我制作了一个 Python 脚本来计算阶乘并用 1000 测试了它!但是当我放1000!进入我的 mac 的内置计算器以检查它返回“不是数字”的计算。我做了一些测试,发现内置计算器最多只能计算 101 个阶乘。这是为什么?

最佳答案

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

import math


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

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

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

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

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

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

关于python - 为什么我的计算机内置计算器最多只能计算 101 个阶乘,但我的 python 阶乘脚本可以计算得更高?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59383266/

相关文章:

python - 为什么只有最里面的嵌套 while 循环起作用?

python - 如何打印列表的某些部分?

macos - 为什么在Mac上使用Python和Pygame播放声音的这段代码无法加载文件并崩溃?

python - 为什么 asyncio.queue 会失败?

objective-c - Xcode 4 中的 Cocoa 绑定(bind)

java - 为什么 OS X java 总是报告 1.6?

python - Google App EngineSearch API 中的分页

python - 如何在 Python 格式字符串中包含符号 "{"?

python - 如何在 mac 上安装 python 的 httplib2?

javascript - 任何 Python 替代 Selenium 以编程方式登录需要 JavaScript 登录的网站?