以指数方式遇到溢出

时间:2016-04-06 18:14:26

标签: python

我有这段代码:

from __future__ import division
import matplotlib.pyplot as plt
import os
import numpy as np
import copy
import random
import math

A_bb=9.2572264*10**(-45)
E_bb=4.8043478/10**11

x=np.arange(0,20,0.01)

def func(x,T):
    x=np.array(x)
    return A_bb*(10**x)**3/(np.exp(10**x*E_bb/T)-1)
popt,pcov=curve_fit(func,frec, Flux_57442_27165)
print (popt)

基本上我想将黑体曲线拟合到某些数据点。但是我得到了这个错误:

overflow encountered in exp w=A_bb*(10**x)**3/(np.exp(10**x*E_bb/T1)-1)

预计T I的值为10 ^ 4。有什么问题,如何解决?

1 个答案:

答案 0 :(得分:0)

Python的本地long类型,来自documentation只能存储最多2 ^ 32的整数:

  

普通整数(也称为整数)是用C中的long实现的,它给出了至少32位的精度

为了解决这个问题,Python还提供了long()数据类型:

  

长整数具有无限的精度。

如果遇到溢出,只需将T应用于T = long(T)

{{1}}

并希望它有效。

如果即便失败,我强烈建议您使用numpy代替much more powerful datatypes