r - 以接近 0 和 1 的概率进行计算时,如何提高 R 的精度?

标签 r floating-point precision

我有一个问题,即 [0,1] 中表示概率的变量总和间隔总和到 0但应该是 >0 .问题肯定与floating point representation有关和精度 R ,但我无法确定哪里出错了。

options(digits = 22)
p1 = 0.8
p2 = 0.9999999999999998

p11 = p1 * p2
p10 = p1 - p11
p01 = p2 - p11
p00 = 1 - p11 - p10 - p01
p11, p10, p01都是numeric . p00也是numeric
> p00
[1] 0

p00 == 0TRUE在我的机器上。但是它不应该是零,因为可以证明 p00>0数学上。

这个问题似乎与p01有关。是小。然而p01>0TRUE仍然适用于我的机器。为什么在p00中取最终和时会出错?

是否有解决此问题的数值技巧,即获得 p00 的精确表示?再次注意 p[0,1] 中的概率.我考虑使用 logexp转型,但没有持续的成功。

最佳答案

R 本身只能处理 64 位浮点数,Rmpfr包可以处理任意精度的浮点数:

library(Rmpfr)

> p1 = mpfr("0.8", 128)
> p2 = mpfr("0.9999999999999998", 128)

> p11 = p1 * p2
> p10 = p1 - p11
> p01 = p2 - p11
> p00 = 1 - p11 - p10 - p01

> p00
1 'mpfr' number of precision  128   bits 
[1] 4.00000000000000000000000461461738779728e-17

编辑:使用刺来定义 mpfr

关于r - 以接近 0 和 1 的概率进行计算时,如何提高 R 的精度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49263169/

相关文章:

r - 在 Shiny 中互连 slider 和数字输入

r - 无法在 ubuntu 20.04 R 版本 4.1.3 上安装包 ‘RcppArmadillo’

r - 将Zoo转换为数据框

c# 字符串到 float 的转换无效?

c - 在c中 float 奇怪的不精确错误

objective-c - 我该如何处理大量的精确警告标志?

python - 查找对数表示的矩阵的特征值

r - 如何为数据框行子集的列分配值

c++ - C - 打印浮点值

python - 机器 epsilon 的倍数是什么意思?