【问题标题】:Behavior of Python ** and % operators with big numbersPython ** 和 % 大数字运算符的行为
【发布时间】:2011-08-10 16:40:32
【问题描述】:

当我将 Python 解释器 a ** b % c 放入大 a(20 位)b(4 位)c(20 位)时,我看到 Python 计算得非常快,几乎就像 pow (a,b,c )。我期望 Python 先计算 a ** b 然后得到结果的模 (%) 的另一种行为,这样的计算将花费更多的时间。

幕后的魔力在哪里?

【问题讨论】:

标签: python math modulo


【解决方案1】:

如果您在 Python 解释器中输入如下内容:

20937505974095709374 ** 3438

然后看到几秒钟的等待。然后尝试:

20937505974095709374 ** 3438 % 6

看到 no 等待,并想知道为什么会有差异,那么您在第一个实例中看到的 delay 实际上是您的终端缓冲和将您刚刚创建的巨大数字打印到屏幕上。

【讨论】:

  • 是的,这正是问题所在,您可以通过将每个计算分配给一个变量而不是打印它来看到。
【解决方案2】:

在现代计算机上,20 个数字小得可笑。尝试 2000 个数字,您可能会发现差异。

另外,这个过去的问题是相关的:How did Python implement the built-in function pow()?

【讨论】:

    【解决方案3】:

    除了 Python 支持任意精度的整数之外,幕后没有什么神奇之处,而且实现得很好。它确实计算了 a**b,然后 %c。

    【讨论】:

      【解决方案4】:

      今天的计算机速度惊人,非常复杂的计算可以在似乎没有时间的情况下进行。你需要重复这样的计算很多次才能看到延迟;我会从一百万开始。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-06
        • 1970-01-01
        • 1970-01-01
        • 2013-12-09
        • 2012-08-08
        • 2010-12-01
        相关资源
        最近更新 更多