首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中得到0而不是一个精确的结果

在R中得到0而不是一个精确的结果
EN

Stack Overflow用户
提问于 2020-03-16 21:35:10
回答 2查看 122关注 0票数 3

我怎样才能得到实际的精确结果而不是圆形的结果呢?

代码语言:javascript
复制
result = ((0.61)**(10435)*(0.39)**(6565))/((0.63)**(5023)*(0.60)**(5412)*(0.37)**(2977)*(0.40)**(3588))

退出:

代码语言:javascript
复制
NaN

因为分母是0

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-16 21:41:46

我认为对数是处理大幂指数的有力工具(参见https://mathworld.wolfram.com/Logarithm.html中的属性)。

您可以尝试首先在数学表达式上使用log,然后依次应用exp,即,

代码语言:javascript
复制
result <- exp((10435*log(0.61)+6565*log(0.39)) - (5023*log(0.63)+5412*log(0.60)+ 2977*log(0.37)+3588*log(0.40)))

这给

代码语言:javascript
复制
> result
[1] 0.001219116
票数 7
EN

Stack Overflow用户

发布于 2020-03-16 21:50:25

R不能处理如此大的指数,因为它将收敛到超过其精度的0。精确并不是无限的。为了满足您的需要,您需要一个任意的精确包,比如Rmpfr。

代码语言:javascript
复制
library(Rmpfr)

precision <- 120

result <- (mpfr(0.61, precision)**10435 * mpfr(0.39, precision)**6565) /
  (mpfr(0.63, precision)**5023 * mpfr(0.60, precision)**5412 * mpfr(0.37, precision)**2977 * mpfr(0.40, precision)**3588)

print(result)

输出:

代码语言:javascript
复制
1 'mpfr' number of precision  120   bits 
[1] 0.0012191160601483692718001967190171336975
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60713514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档