如何在R中保持浮点精度?

时间:2014-04-04 18:47:50

标签: r windows-7 floating-point floating-accuracy

我将浮点数分配给R中的变量。

e.g。

k <- 1200.0000002161584854

我得到了

 > k
 [1] 1200
 > k+0.00000001
 [1] 1200

如何保持k的精度?

我在这里看了一些帖子,但是,我找不到解决方案。

2 个答案:

答案 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,它将不会显示所有数字。