我在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版本:3.6.2(2019-12-12(
- RStudio版本:1.1.456
- 平台:i386-w64-mingw32/i386(32位(
提前感谢
默认情况下,R只显示7位精度;x90
、y90
和z90
都等于4.5到7个有效数字,但打印更多的有效数字表明x90
略大于4.5(因为浮点数学不精确(。
print(c(x90,y90,z90),digits=20)
90% 90% 90%
4.5000000000000008882 4.5000000000000000000 4.5000000000000000000
为了更深入地理解,你必须深入研究分位数计算的细节,但大多数人(包括我(通常会把它放在";浮点数学是不精确的,接受它吧;。