2013-05-21 96 views
2

爲什麼的r格式化函數返回一個奇怪的結果

format(4444444444444444444,scientific=FALSE) 

回報 「4444444444444444672」?

我認爲這可能是一個整數精度的事情,但這個數字相對較小。謝謝!

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

回答

5

如果你給的整數。R大於:

> .Machine$integer.max 
[1] 2147483647 

據其轉換爲一個雙。 R-FAQ has 7.31。與浮點精度相關的問題通常出現在SO上:Controlling number of decimal digits in print output in R

(矢量索引的大小隨着R(3.0.0)的最後一個版本的增加而增加,似乎可能最大的整數尺寸可能會擴大未來我不太瞭解如何保持整數大小的限制以及訪問更大的向量索引。)

4

這不是32位整數。

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

這是一個雙精度浮點數,它只有15-16位的精度。以上失敗,因爲該數字大於.Machine$integer.max...672四捨五入錯誤。如果您需要使用大量數據,請考慮像gmp這樣的軟件包。