在 R 中获取 0 而不是精确结果
Getting 0 in R instead of a precise result
如何获得实际的精确结果而不是四舍五入的结果?
result = ((0.61)**(10435)*(0.39)**(6565))/((0.63)**(5023)*(0.60)**(5412)*(0.37)**(2977)*(0.40)**(3588))
输出:
NaN
因为分母是0
我认为 logarithm 是处理大幂指数的强大工具(参见 https://mathworld.wolfram.com/Logarithm.html 中的属性)
您可以尝试先在数学表达式上使用 log
,然后依次应用 exp
,即
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)))
这给出了
> result
[1] 0.001219116
R 无法处理如此大的指数,因为这将超出其精度收敛到 0。精度不是无限的。对于你想要的,你需要一个任意精度的包,比如Rmpfr.
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)
输出:
1 'mpfr' number of precision 120 bits
[1] 0.0012191160601483692718001967190171336975
如何获得实际的精确结果而不是四舍五入的结果?
result = ((0.61)**(10435)*(0.39)**(6565))/((0.63)**(5023)*(0.60)**(5412)*(0.37)**(2977)*(0.40)**(3588))
输出:
NaN
因为分母是0
我认为 logarithm 是处理大幂指数的强大工具(参见 https://mathworld.wolfram.com/Logarithm.html 中的属性)
您可以尝试先在数学表达式上使用 log
,然后依次应用 exp
,即
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)))
这给出了
> result
[1] 0.001219116
R 无法处理如此大的指数,因为这将超出其精度收敛到 0。精度不是无限的。对于你想要的,你需要一个任意精度的包,比如Rmpfr.
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)
输出:
1 'mpfr' number of precision 120 bits
[1] 0.0012191160601483692718001967190171336975