[程式] R 數值跑出"整數向上溢位產生了 NA"

看板Statistics作者時間14年前 (2010/04/20 23:50), 編輯推噓2(2011)
留言13則, 5人參與, 5年前最新討論串1/1
[軟體程式類別]: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)

04/21 00:18, , 1F
f=numeric(51);f[2]=1;for(i in 3:51){f[i]=f[i-1]+f[i-2]}
04/21 00:18, 1F

04/21 08:58, , 2F
能請教整數向上溢位是什麼意思嗎?謝謝
04/21 08:58, 2F

04/21 13:06, , 3F
f 只有 51 個數字 , 而你迴圈的第一行指定了第 52 個數字
04/21 13:06, 3F

04/21 13:07, , 4F
好像不太對 我再想想
04/21 13:07, 4F

04/21 18:40, , 5F
可能是到達 numeric vector 物件的記憶體上限
04/21 18:40, 5F

04/21 23:37, , 6F
1134903170 + 1836311903在R中,它用double幫你加完在轉
04/21 23:37, 6F

04/21 23:38, , 7F
成integer.如果純用integer相加,如 f[47]+f[46], 則是
04/21 23:38, 7F

04/21 23:39, , 8F
as.integer(1134903170) + as.integer(1836311903)
04/21 23:39, 8F

04/21 23:39, , 9F
在R中,最大正整數為 as.integer(2^31-1).
04/21 23:39, 9F

04/21 23:40, , 10F
所以就是overflow了.
04/21 23:40, 10F

04/21 23:47, , 11F
一般32位元的機器整數只有10digits,double可以有16.
04/21 23:47, 11F

04/21 23:47, , 12F
wiki:float point or fixed point integer
04/21 23:47, 12F

01/02 15:06, 5年前 , 13F
成integer.如果 https://daxiv.com
01/02 15:06, 13F
文章代碼(AID): #1BpSrDMh (Statistics)