请考虑以下内容:
> x<-178379.4999999999999999999999999999999
> x
[1] 178379.5
> round(x)
[1] 178380
这似乎是一个基本的舍入错误。 R中是否存在已知的舍入误差?还是因为即使在工作存储器中,R也最多只能处理22位数字?
答案 0 :(得分:4)
这是两个非常频繁的常见问题解答的组合。
options(digits=22)
设置为将数字打印到小数点后的位置,将无济于事。精度已丢失,因为(按照您的建议)R仅存储不超过53个二进制/ 22位十进制精度的值。这不是关于打印精度的。
如果您使用较少的'9',您会看到预期的结果(这是R有限的 printing 精度与预期的取整的组合)
> x <- 178379.49
>
> x
[1] 178379.5 ## prints as .5, but full precision is present
> round(x)
[1] 178379
答案 1 :(得分:3)
由于硬件中使用浮点表示,因此问题可能更广泛。
不确定this website是否有用,但是它表明您在写入178379.49999999999999999999999999999999999时实际存储的数字为178379.5(根据IEEE-754浮点标准):
答案 2 :(得分:2)
有关大于15的数字的说明,请参见def
。
大位数
请注意,对于较大的数字值(当前用于大于等于16的数字),有效位数的计算将取决于平台的sprintf()功能的内部(C库)实现。