【问题标题】:Why python math.factorial(x) is very fast? [closed]为什么 python math.factorial(x) 非常快? [关闭]
【发布时间】:2012-07-03 15:15:43
【问题描述】:

我有一个问题,为什么python数值计算非常快? 例如下面的代码运行时间不到一秒

import  math
print math.factorial(10000)

为什么???

【问题讨论】:

  • 这个函数的速度很大程度上取决于 Python 版本。它在 Python 3 中要快得多,而您似乎使用的是 Python 2.x。
  • 为什么不快?
  • 有关 Python 2.x 和 3.x 中不同阶乘算法的讨论,请参见 Why is math.factorial much slower in Python 2.x than 3.x?。关闭为重复。
  • 在 math_factorial 的 c 代码中我发现它使用了一个名为 PyNumber_Multiply 的函数,但我没有找到它的实现

标签: python


【解决方案1】:

math module's functions 是用 C 语言实现的:

它提供对 C 标准定义的数学函数的访问。

通过在 C 语言中使用高效算法,您可以快速获得结果。

如果您要问为什么这个特定的操作如此之快,请查看Why is math.factorial much slower in Python 2.x than 3.x?C code itself

【讨论】:

  • 阶乘的速度取决于算法的复杂度。 C 中的直接实现将比 Python 3.x 中使用的算法慢得多
  • @SvenMarnach:我怎么能猜到 OP 是在比较 python 2 和 3 的速度? :-P
  • 算法的结果是一个超过30000位的数字,对于这个巨大的数字计算你应该使用数组或字符串,但我很困惑,为什么它返回的结果小于一秒跨度>
  • “它只是在底层重用标准 C 函数。” – 当然不是阶乘,它返回一个任意精度的整数。
  • @SvenMarnach:是的,已经忙于更新帖子了,但是随着 hg.python.org 的消失,我花了一秒钟将源 URL 转换为 bitbucket。我也更正了另一个答案中的断开链接。
猜你喜欢
  • 2012-04-06
  • 2018-03-31
  • 1970-01-01
  • 2010-10-20
  • 1970-01-01
  • 2013-03-08
  • 2013-06-29
  • 2012-04-06
  • 1970-01-01
相关资源
最近更新 更多