Python中的大数返回无穷大
我在处理一些非常大的数字时,出现了这个错误。比如说,当我尝试计算的时候:
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 标准库的一部分。