首页 > 解决方案 > 有没有办法处理涉及 R 中大值指数的计算?

问题描述

我在网上和网站上看了一点,但没有找到任何解决方案。我的问题相对简单,所以如果你能指出一个可能的解决方案,非常感谢。

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)

我如何计算我的向量的平均值并处理 Inf 值,知道 R 可能处理平均值但不是平均值计算的分子中的所有值?

标签: rprecisionnumeric

解决方案


有一种极端情况,您可以通过简单地在数学上重申您的问题来解决您的问题,但这需要您的向量的长度非常大和/或您的 exp 很大。数字接近数字限制:

由于均值sum(x)/n可以写为sum(x/n)exp(x)/exp(y) = exp(x-y),因此您可以计算sum(exp(x-log(n))),这可以减轻 log(n) 的负担。

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

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


推荐阅读