2

为什么

format(4444444444444444444,scientific=FALSE)

返回“4444444444444444672”?

我认为这可能是一个整数精度的东西,但这个数字相对较小。谢谢!

我在 Ubuntu Linux 上运行 R 版本 3.0.0。

4

2 回答 2

5

如果你给 R 一个大于的整数:

> .Machine$integer.max
[1] 2147483647

它将其转换为双精度。R-FAQ有7.31。与浮点精度相关的问题通常出现在 SO:Controlling number of decimal digits in print output in R

(矢量索引的大小随着 R 的最后一个版本(3.0.0)而增加,并且整数的最大大小将来可能会扩大。我不太明白我们如何保持限制整数的大小,还可以访问更大的向量索引。)

于 2013-05-21T14:17:11.743 回答
4

这不是一个 32 位整数。

R> as.integer(4444444444444444444)
[1] NA
Warning message:
NAs introduced by coercion 

它是一个双精度浮点数,只有 15-16 位精度。以上失败,因为数字大于.Machine$integer.max。是...672舍入误差。如果您需要使用大量数字,请考虑使用gmp 之类的软件包。

于 2013-05-21T14:18:59.727 回答