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版本: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(因为 floating point math is imprecise).
print(c(x90,y90,z90),digits=20)
90% 90% 90%
4.5000000000000008882 4.5000000000000000000 4.5000000000000000000
为了更深入地理解,您必须深入研究分位数计算的细节,但大多数人(包括我)通常将其留在“浮点数学不精确,接受它”。
我在 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(因为 floating point math is imprecise).
print(c(x90,y90,z90),digits=20)
90% 90% 90%
4.5000000000000008882 4.5000000000000000000 4.5000000000000000000
为了更深入地理解,您必须深入研究分位数计算的细节,但大多数人(包括我)通常将其留在“浮点数学不精确,接受它”。