为什么当x ** y没有时math.pow抛出OverflowError?

时间:2015-10-14 18:36:44

标签: python math

根据文档,math.pow函数的运行方式为:

def pow(x, y):
    """
    pow(x, y)

    Return x**y (x to the power of y).
    """
    pass

我决定乱用大号,但是当我运行时我收到错误:

import math
calc = math.pow(1000, 103)
print(calc)

Traceback (most recent call last):
  File "test.py", line 3, in <module>
    print(math.pow(1000, 103))
OverflowError: math range error

但是,以下内容并非错误:

calc = 1000 ** 103
print(calc)
>> (very large number)

如果假设math.pow作为x**y运行,为什么它会抛出OverflowError,而明确执行x**y则不会?{/ p>

2 个答案:

答案 0 :(得分:5)

math.pow使用的浮点数限制在1e308左右。如果您需要某个功能,请仅使用powoperator.pow(请注意这些不一样)。

operator.pow正是来自x ** y的操作,而pow是一个三参数函数来计算x ** y % z,其中z可以省略。

答案 1 :(得分:0)

math.pow使用C编译代码以及float1.2E-383.4E+38C的限制。只要结果超过3.4E+38,就会抛出OverflowError

相关问题