tom*_*mka 5 floating-point precision r
我有一个问题,即表示[0,1]区间总和的概率的变量之和0应该是>0.问题肯定与浮点表示和精度有关R,但我无法确定它出错的地方.
options(digits = 22)
p1 = 0.8
p2 = 0.9999999999999998
p11 = p1 * p2
p10 = p1 - p11
p01 = p2 - p11
p00 = 1 - p11 - p10 - p01
Run Code Online (Sandbox Code Playgroud)
p11, p10, p01都是numeric.p00也numeric不过
> p00
[1] 0
Run Code Online (Sandbox Code Playgroud)
和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
Run Code Online (Sandbox Code Playgroud)
编辑:使用stings来定义 mpfr