在这个简化的代码中,我在cosh函数中遇到溢出错误:
import numpy as np
x = np.linspace(0,10,100)
for i in range(np.size(x)):
print np.cosh(20*x[i]**2)
有没有办法轻松解决这个问题?
答案 0 :(得分:2)
当您需要处理大数字时,Sympy很有用:
import sympy as sy
x = sy.symbols("x", real=True)
y = 1/sy.cosh(x)
print(y.subs(x, 2000).evalf()) # => 5.15307174592230e-869
要确定防止溢出的边界,请考虑最大浮点值为1.79769e + 308。因此
print(sy.acosh(1.79769e+308).evalf()) # => 710.475858330117
所以你可以做到
inv_acosh = lambda x: 1/np.cosh(x) if abs(x) < 710.4 else 0.
答案 1 :(得分:0)
试试这个
lambda x: 0.5/cosh(np.minimum(np.abs(x), 700.0*np.ones(x.shape)))