我将浮点数分配给R中的变量。
e.g。
k <- 1200.0000002161584854
我得到了
> k
[1] 1200
> k+0.00000001
[1] 1200
如何保持k的精度?
我在这里看了一些帖子,但是,我找不到解决方案。
答案 0 :(得分:1)
除上述答案外,请注意k
的值与您最初分配的值不同。它只有大约15或16位精度(大部分时间这比你需要的多)。
k <- 1200.0000002161584854
sprintf('%1.29f',k)
"1200.00000021615846890199463814497"
请注意,有些库可以提高精度,例如gmp
,但它们是围绕整数设计的。
答案 1 :(得分:0)
首先,要确保您确实丢失了精度,请使用sprintf()
打印或使用print()
并将digits
参数设置为高(但不超过22)来查看更多数字:
k <- 1200.0000002161584854
k
# [1] 1200
sprintf("%4.20f", k)
# [1] "1200.00000021615846890199"
请参阅此question为什么我设置的k
与打印的内容之间存在差异。
现在,我们可以添加0.00000001
:
m <- k + 0.00000001
m
# [1] 1200
sprintf("%4.20f", m)
# [1] "1200.00000022615836314799"
我们看到这些值实际上是不同的:
sprintf("%4.20f", k - m)
# [1] "-0.00000000999989424599"
我们在打印时没有看到差异,因为如果没有告诉R,它将不会显示所有数字。