我想知道如何计算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”丢失,没有默认 –