如何处理python中的大浮点数

时间:2016-01-27 10:44:13

标签: python-2.7 int floating-accuracy

我的代码的某些部分生成大的int数,这在其他计算中进一步使用。这个数字是通过调用阶乘函数生成的。因为在其他计算中,涉及浮点数和大的int,所以我收到错误说

  

“OverflowError:long int太大而无法转换为float”。

有没有办法解决这个限制? 在这里,我附上了我的代码。

import numpy as np
    #=============================alpha
def alpha(li,dtype=float):
    ai=1.0
    for mi in range(1,li+1):
        ai=ai*(1-(1/(2.0*mi)))
    return ai
def gamma(li,dtype=int):
    return  np.power(np.exp(1)/li,li)*(np.math.factorial((li)))

def J1J2(xi,deltai,dtype=int):
    xii=np.abs(xi)
    j1i=np.power(np.abs(xii-deltai),2.0)
    j2i=np.power(np.abs(xii+deltai),2.0)
    return int(np.floor(j1i)),int(np.ceil(j2i))
#========================***********
def R(Xi,sigmai,ni,dtype=float):
    ui=Xi/sigmai

    a1i=np.power(np.exp(1)/ni,ni)
    a2i=np.power(ui,2.0*ni)
    a3i=(np.power(ui,2.0))
    a4i=np.exp(-a3i)
    ri=a1i*a2i*a4i    
    return ri

def R1(Xi,sigmai,ni,dtype=float):
    ui=1.0*Xi/sigmai
    ri=np.exp(-2.0*np.power(ui-np.sqrt(ni),2.0))    
    return  ri    

def Sumpro(xi,ni,sigmai,a1i,a2i,dtype=float):
    Sum=0.0
    for li in (a1i,a2i):
        Sum=Sum+(alpha(li)/gamma(np.abs(ni-li)))*R(xi,sigmai,np.abs(ni-li))
    return 2.0*gamma(ni)*Sum

def Xmatrix(Xi,sigmai,Kxi,Nxi,deltai,dtype=float):
    Xmati=np.zeros((Kxi,Nxi),dtype=float)
    for i in range(Nxi):
        xi=1.0*Xi[i]
        ui=xi/sigmai
        J1i,J2i=J1J2(ui,deltai)
        print(i,' ',J1i,J2i)
        Xmati[0:J1i,i]=1
        for j in range(J1i,J2i):
            print(j )
            Xmati[j,i]=Sumpro(xi,j,sigmai,np.abs(J1i),np.abs(j))
    return Xmati    


def Xmatrix1(Xi,sigmai,Kxi,Nxi,deltai,dtype=float):
    Xmati=np.zeros((Kxi,Nxi),dtype=float)
    for i in range(Nxi):
        xi=1.0*Xi[i]
        ui=xi/sigmai
        ni=int(np.floor(np.sqrt(np.abs(ui))))
        J1i,J2i=J1J2(ui,deltai)
        Xmati[ni,i]=Sumpro(xi,ni,sigmai,np.abs(J1i),np.abs(ni))

    return Xmati    

x=np.linspace(10.0,100.0,50)
X=Xmatrix1(x,1,100,50,np.exp(-1.05))    

0 个答案:

没有答案