我有一个问题,即 [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 == 0
是 TRUE
在我的机器上。但是它不应该是零,因为可以证明 p00
是 >0
数学上。这个问题似乎与
p01
有关。是小。然而p01>0
是 TRUE
仍然适用于我的机器。为什么在p00
中取最终和时会出错?是否有解决此问题的数值技巧,即获得
p00
的精确表示?再次注意 p
是 [0,1]
中的概率.我考虑使用 log
和 exp
转型,但没有持续的成功。
最佳答案
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/