Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有一种方法可以处理R中大数值的指数计算?_R_Precision_Numeric - Fatal编程技术网

有没有一种方法可以处理R中大数值的指数计算?

有没有一种方法可以处理R中大数值的指数计算?,r,precision,numeric,R,Precision,Numeric,我在网上和网站上查找了一下,但没有找到任何解决方案。我的问题相对简单,所以如果你能给我指出一个可能的解决方案,我将不胜感激 test_vec <- c(2,8,709,600) mean(exp(test_vec)) test_vec_bis <- c(2,8,710,600) mean(exp(test_vec_bis)) exp(709) exp(710) # The numerical limit of R is at exp(709) test\u vec这里有一种方法,

我在网上和网站上查找了一下,但没有找到任何解决方案。我的问题相对简单,所以如果你能给我指出一个可能的解决方案,我将不胜感激

test_vec <- c(2,8,709,600)
mean(exp(test_vec))

test_vec_bis <- c(2,8,710,600)
mean(exp(test_vec_bis))
exp(709)
exp(710)
# The numerical limit of R is at exp(709)

test\u vec这里有一种方法,您可以只选择
test\u vec
中给出答案的部分:

mean(exp(test_vec)[which(exp(test_vec) < Inf)])

[1] 1.257673e+260

t2 <- c(2,8,600)
mean(exp(t2))

[1] 1.257673e+260
mean(exp(test\u vec)[其中(exp(test\u vec)t2存在一种边缘情况,您可以通过简单地用数学方法重新说明问题来解决问题,但这需要向量的长度非常大和/或大的经验数接近数值极限:

由于平均值
sum(x)/n
可以写为
sum(x/n)
,并且
exp(x)/exp(y)=exp(x-y)
,因此可以计算
sum(exp(x-log(n))
,从而减少log(n)

虽然这适用于您的示例,但很可能不适用于您的实向量。
在这种情况下,您必须参考@fra建议的
Rmpfr
等包

看看这个答案,谢谢你的回复。不,我实际上考虑过这个选项,但我必须包含每个值。在这种情况下,截断不是一个选项……好主意,但只适用于接近极限的值,如您所说。谢谢“Rmpfr”软件包是迄今为止我找到的最好的解决方案。
mean(exp(test_vec))
[1] 2.054602e+307
sum(exp(test_vec - log(length(test_vec))))
[1] 2.054602e+307

sum(exp(test_vec_bis - log(length(test_vec_bis))))
[1] 5.584987e+307