作者Cidolfas ()
看板Statistics
標題[程式] R 數值跑出"整數向上溢位產生了 NA"
時間Tue Apr 20 23:50:34 2010
[軟體程式類別]:R
[程式問題]:大一點的數值跑不出來
[軟體熟悉度]:低(1~3個月)
[問題敘述]:我嘗試用R寫斐波那契數列,數值小的時候能順利跑出,
但當所求值大於46時,所求跑出
"整數向上溢位產生了 NA"
請問該如何解決。謝謝
[程式範例]:
rm(list=ls(all=TRUE))
f=0:50
i=1
for(i in 1:50)
{
f[i+2]=f[i+1]+f[i]
cat(i,f[i+1],"\n")
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.85.174.32
※ 編輯: Cidolfas 來自: 219.85.174.32 (04/20 23:53)
1F:推 kvince:f=numeric(51);f[2]=1;for(i in 3:51){f[i]=f[i-1]+f[i-2]} 04/21 00:18
2F:→ Cidolfas:能請教整數向上溢位是什麼意思嗎?謝謝 04/21 08:58
3F:→ gsuper:f 只有 51 個數字 , 而你迴圈的第一行指定了第 52 個數字 04/21 13:06
4F:→ gsuper:好像不太對 我再想想 04/21 13:07
5F:推 gsuper:可能是到達 numeric vector 物件的記憶體上限 04/21 18:40
6F:→ clickhere:1134903170 + 1836311903在R中,它用double幫你加完在轉 04/21 23:37
7F:→ clickhere:成integer.如果純用integer相加,如 f[47]+f[46], 則是 04/21 23:38
8F:→ clickhere:as.integer(1134903170) + as.integer(1836311903) 04/21 23:39
9F:→ clickhere:在R中,最大正整數為 as.integer(2^31-1). 04/21 23:39
10F:→ clickhere:所以就是overflow了. 04/21 23:40
11F:→ clickhere:一般32位元的機器整數只有10digits,double可以有16. 04/21 23:47
12F:→ clickhere:wiki:float point or fixed point integer 04/21 23:47