考虑以下几点:
> x<-178379.4999999999999999999999999999999
> x
[1] 178379.5
> round(x)
[1] 178380
这似乎是一个基本的舍入误差。 R 中是否存在已知的舍入误差?还是因为即使在工作内存中,R 也只能处理最多 22 位数字?
最佳答案
这是两个非常常见的问题的组合。
- finite floating-point precision:这个 R FAQ 7.31,参见例如Why are these numbers not equal? .该值四舍五入为 178379.5。如果您设置
options(digits=22)
将数字打印到更多小数位,这将无济于事;精度已经丢失,因为(如您所建议的)R 仅存储精度高达 53 位二进制/22 位十进制数字的值。 - 四舍五入:R“四舍五入”,见Is there an error in round function in R? .这意味着该值将向上舍入。
这与打印精度无关。
如果您使用较少的 '9',您会看到您所期望的结果(这将是 R 有限的打印精度加上预期的舍入的组合)
> x <- 178379.49
>
> x
[1] 178379.5 ## prints as .5, but full precision is present
> round(x)
[1] 178379
关于R 中的舍入误差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51450396/