我一直在嘗試使用Python來計算使用「梳」功能在SciPy的包概率。代碼如下:的Python(NumPy的和SciPy的)計算與大整數
p = 0
for k in np.arange(8) + 1:
p += comb(8,k, exact = True)*k*8**(2*(2-k))*k**(2*k)
print(p) ## used to check the value of p in each iteration
p /= 2**59
但是,我得到的結果爲南。以下是P的值,每次迭代:結果:
8.881784197e-16
2.44249065418e-15
5.76210086589e-15
1.35336620383e-14
3.16282379379e-14
-5.16631424912e-15
-5.20085316827e-15
nan
要使其工作,我試圖做師在每次迭代:
p = 0
for k in np.arange(8) + 1:
p += comb(8,k, exact = True)*k*8**(2*(2-k))*k**(2*k)/ 2**59
print(p)
但這並沒有幫助,和我仍然有楠到底:
8.881784197e-16
2.44249065418e-15
5.76210086589e-15
1.35336620383e-14
3.16282379379e-14
-5.16631424912e-15
-5.20085316827e-15
nan
我假設這是由整數不同的表示引起:負值和男可能是由長期作爲解釋浮動造成的。事實上,當我一步一步的計算,它似乎工作:
In [155]:
k = 8
comb(8,k, exact = True)*k*8**(2*(8-k))*k**(2*k)/2**59
Out[155]:
0.00390625
In [156]:
k = 7
comb(8,k, exact = True)*k*8**(2*(8-k))*k**(2*k)/2**59 + _
Out[156]:
0.008122931679330314
In [158]:
k = 6
comb(8,k, exact = True)*k*8**(2*(8-k))*k**(2*k)/2**59 + _
Out[158]:
0.010721382431305493
...
任何想法如何解決這個問題?任何建議,非常感謝!
謝謝!
我得到兩次警告(python3): 'RuntimeWarning:除以零long_scalars'遇到 'RuntimeWarning:在double_scalars' – undershock 2014-09-03 19:44:18