【问题标题】:Python math range errorPython数学范围错误
【发布时间】:2017-08-26 05:05:36
【问题描述】:

尝试在 Python 中计算非常大的数字时出现错误。这是我的代码:

# Where fourthNumber = 2790
# and dee = 413
emm = math.pow(fourthNumber, dee)

我的错误是:

line 44, in <module>
    emm = math.pow(fourthNumber, dee)
OverflowError: math range error

有没有办法解决这个错误?我认为 Python 可以处理任意大的数字?还是我错了?任何帮助表示赞赏。谢谢!

【问题讨论】:

  • 2790**413 工作...math.pow(..) 更多用于浮点数。

标签: python math int exponent


【解决方案1】:

内置的pow 与整数运算一起使用:

>>> pow.__module__
'__builtin__'
>>> pow is math.pow
False
>>> pow(2790, 413)
108276934...

【讨论】:

    【解决方案2】:

    问题在于 math.pow(..) 可以处理浮点数。在 Python 中浮点数不是任意大的。只有ints 是(在longs 在)。

    但是,如果两个数字是整数,您可以使用 ** 运算符,它会执行 整数幂(当然参数是整数):

    >>> 2790**413
    10827693458027068918752254513689369927451498632867702850871449492721716762882046359646654407147290095143376244612860740505063304616869045757879636651922242895944635094287526023557872050108996014618928707382416906723717536207944990935946477343103732942220495426003253324856391048675505527041527544249845903325107575822015010197006079682477544271998209608154757421132764034059289159228295810448568286783859864141487725512980856505994152145510660350938086763233208252511256291934375881870590480237727775536326670654123168787472077359939510018827829233028430183558108518520524567765780717109616748933630364200317687291046055118737587697510939517252245710306646155772831436013971724481443654932630319085588147436112198934867224850036968074130558127066188475740553149587714112808551835880666012903651859580234129805580074844684526620091506655345299434455806896837926335229779632528684030400890708579038639280240022309690038032176604539091205540422068492362106868171343650410145963283813864374487990607671475570427243900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    

    如果您将其转换为float,您会得到:

    >>> float(2790**413)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    OverflowError: int too large to convert to float
    

    所以错误清楚地表明 无法像floats 那样处理这么大的数字。

    【讨论】:

      【解决方案3】:

      你可以处理任意大的整数数; math.pow 对浮点数进行运算。

      2790 ** 413 > 1000 ** 413 = 1e+1239,远高于 1e+308 左右的浮点范围。

      使用** 保持在整数域内,并获得您的巨大整数。

      【讨论】:

        【解决方案4】:

        数学库中可能存在错误 - 此外,math.pow 有点多余,您可以改用fourthNumber ** dee

        【讨论】:

        • 这不是错误。 2790**413 的结果不能表示为浮点数。
        【解决方案5】:

        Willem,** 与 math.pow 不同

        与内置的 ** 运算符不同,math.pow() 将其两个参数都转换为浮点类型。使用 ** 或内置 pow() 函数来计算精确的整数幂。

        如果您必须处理大量数字,也可以使用 numpy。

        【讨论】:

        • 这不是我所说的...答案是“math.pow 适用于浮动。”所以当然这意味着它首先 converts 它到浮动...
        • afaik numpy 适用于 64 位数字,np.power(2790,413) 警告发生溢出并返回 -9223372036854775808,这是不正确的。
        • 对不起,我误解了你的意思:)
        • "如果您必须处理大量数字,您也可以使用 numpy。"
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多