浮点运算的意外,精确整数结果

时间:2017-07-22 07:35:33

标签: r floating-point

对于1/3 * 3,R产生1的精确小数答案。对于具有不可避免的舍入误差的浮点运算,情况不应该如此:

1 / 3~0。(01)
3~11
1/3 * 3~0。(1)

查看R的输出超出双点精度的限制,R计算1/3 * 3完全(基数为10)1。使用浮点运算时,这个结果怎么可能?

> sprintf("%.60f",1/3)
[1] "0.333333333333333314829616256247390992939472198486328125000000"
> sprintf("%.60f",3)
[1] "3.000000000000000000000000000000000000000000000000000000000000"
> sprintf("%.60f",1/3*3)
[1] "1.000000000000000000000000000000000000000000000000000000000000"

0 个答案:

没有答案