Python中的大数返回无穷大

1 投票
2 回答
65 浏览
提问于 2025-04-14 16:58

我在处理一些非常大的数字时,出现了这个错误。比如说,当我尝试计算的时候:

import random
import numpy as np
import cmath
import math
import mpmath
from scipy.special import gamma, factorial
A= 11.6 ** 422.5

运行时警告:在双精度浮点数中遇到溢出

输出结果是无穷大(inf)

我试着使用

A= np.float128(11.6 ** 422.5)

来存储这个数字,但说是在Windows上不支持

有没有人能提供一个解决方案,让我可以存储这个值,而不是得到无穷大?

2 个回答

0

这段代码会产生一个 Python 浮点数错误:

In [28]: 11.6 ** 422.5
---------------------------------------------------------------------------
OverflowError                             Traceback (most recent call last)
Cell In[28], line 1
----> 1 11.6 ** 422.5

OverflowError: (34, 'Result too large')

In [29]: np.array(11.6) ** 422.5

使用 numpy 时,出现了这样的警告:

C:\Users\14256\AppData\Local\Temp\ipykernel_6764\1884378001.py:1: 运行时警告:在计算幂时发生了溢出

np.array(11.6) ** 422.5

输出结果是:inf(无穷大)

在 Windows 系统上,numpy 似乎不能处理更大的浮点数:

In [30]: np.array(11.6).astype('float128')
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[30], line 1
----> 1 np.array(11.6).astype('float128')

TypeError: data type 'float128' not understood

不过,因为你已经导入了 mpmath,所以可以使用它来解决这个问题:

In [32]: mpmath.mpf(11.6) ** 422.5
Out[32]: mpf('5.4137780681010568e+449')
4

你可以使用 decimal.Decimal 来实现这个目的。

import decimal
result = decimal.Decimal("11.6") ** decimal.Decimal("422.5")
print(result)

这会输出

5.413778068101126642433515669E+449

decimal 是 Python 标准库的一部分。

撰写回答