我想知道如何計算R中的大數值乘法。 R返回Inf!R中的大數乘法
例如:
6.350218e+277*2.218789e+215
[1] Inf
讓我澄清一下這個問題更多: 考慮下面的代碼和outFunc函數的結果:
library(hypergeo)
poch <-function(a,b) gamma(a+b)/gamma(a)
n<-c(37 , 41 , 4 , 9 , 12 , 13 , 2 , 5 , 23 , 73 , 129 , 22 , 121)
v<-c(90.2, 199.3, 61, 38, 176.3, 293.6, 318.6, 328.7, 328.1, 313.3, 142.4, 92.9, 95.5)
DF<-data.frame(n,v)
outFunc<-function(k,w,r,lam,a,b) {
((((w*lam)^k) * poch(r,k) * poch(a,b)) * hypergeo(r+k,a+k,a+b+k,-(w*lam)))/(poch(a+k,b)*factorial(k))
}
,並在函數返回:
outFunc(DF$n,DF$v,0.2, 1, 3, 1)
[1] 0.002911330+ 0i 0.003047594+ 0i 0.029886646+ 0i 0.013560599+ 0i 0.010160073+ 0i
[6] 0.008928524+ 0i 0.040165795+ 0i 0.019402318+ 0i 0.005336008+ 0i 0.001689114+ 0i
[11] Inf+NaNi 0.005577985+ 0i Inf+NaNi
從上面可以看出,outFunc返回Inf + NaNi for nv我檢查了部分代碼段,我發現這些n值返回的結果poch(r,k)是Inf。(w lam)^ k poch(r,k)我還檢查我的代碼在數學等效代碼這一切都OK了:
in: out[indata[[All, 1]], indata[[All, 2]], 0.2, 1, 3, 1]
out: {0.00291133, 0.00304759, 0.0298866, 0.0135606, 0.0101601, 0.00892852, \
0.0401658, 0.0194023, 0.00533601, 0.00168911, 0.000506457, \
0.00557798, 0.000365445}
現在請讓我知道如何解決這個問題,因爲簡單,因爲它是在數學。問候。你必須在基礎R,它不需要專門的庫中可用
嘗試'GMP :: mul.bigz(6.350218e + 277,+ 2.218789e 215)' – Khashaa
或用[大人國(https://cran.r-project.org/web/ packages/Brobdingnag/index.html)庫 –
感謝Khashaa 2,但它返回:錯誤mul.bigz(6.350218e + 277 * 2.218789e + 215): 參數「e2」丟失,沒有默認 –