2017-08-13 70 views
3
options(digits = 18) 
x <- 0.127272727272727287 
str(x) 
# num 0.127 
x 
#[1] 0.127272727272727287 
as.character(x) 
#[1] "0.127272727272727" 
as.numeric(as.character(x)) 
[1] 0.12727272727272701 

01從何而來?這裏發生了什麼?爲什麼`as.numeric`字符帶小數點會加上附加數字

+3

由於閉合浮點數可以表示'0.127272727272727'是'0.1272727272727270098062746228606556542217731475830078125' –

+1

和'as.character'表示實數和複數至15個顯著數字(從'?as.character') –

+2

本質上的副本[爲什麼這些數字不相等?](https://stackoverflow.com/q/9508518/903061) – Gregor

回答

3

當您查看數字部分時,可以在幫助頁面?options中暗示。您可以將數字位數設置爲最大爲22的任意數字,但這並不意味着R將準確地表示那麼多數字。 R使用 IEEE double-precision。維基百科告訴我們,這表示有

符號位:1位
指數:11位
有效數字精度:53位(52明確地存儲)

因此R存儲號碼到log(2^53, 10) = 15.95459小數數字精度。任何你超越的東西都是運氣。