R 中相同值的舍入不一致

inconsistent rounding in R for the same value

我在 R 中遇到了一些非常奇怪的行为,我这辈子都弄不明白。最小可行示例如下:

x <- c(1, 1, 6, 1)
y <- c(0, 5)
z <- c(4, 0, 0, 2, 0, 5)

x90 <- quantile(x, 0.9)
y90 <- quantile(y, 0.9)
z90 <- quantile(z, 0.9)

c(x90, y90, z90)
round(c(x90, y90, z90), 0)

输出为:

> c(x90, y90, z90)
90% 90% 90% 
4.5 4.5 4.5 
> round(c(x90, y90, z90), 0)
90% 90% 90% 
  5   4   4  

谁能告诉我为什么 4.5 有时四舍五入到 4,但不是总是四舍五入,好吗?

一些系统信息:

提前致谢,

R默认只显示7位精度; x90y90z90 都等于 4.5 到 7 位有效数字,但打印更多有效数字显示 x90 略大于 4.5(因为 floating point math is imprecise).

print(c(x90,y90,z90),digits=20)
                  90%                   90%                   90% 
4.5000000000000008882 4.5000000000000000000 4.5000000000000000000 

为了更深入地理解,您必须深入研究分位数计算的细节,但大多数人(包括我)通常将其留在“浮点数学不精确,接受它”。