2012-10-29 41 views
0

我使用「R.utils」包中的intToBin()函數,並且無法使用它將大數十進制數轉換爲二進制數。intToBin與大數

我得到這個錯誤:強制引入NA。

是否有另一個功能可以處理大數字/是否有算法/代碼來實現這樣的功能?

感謝

回答

2

如果你讀過幫助頁面intToBin,它很明確地說,它以「整數」的輸入。這些不是數學上的「整數」,而是計算機語言定義的整數,限於16位(或類似的)。您需要找到(或寫入:-()一個將浮點數轉換爲二進制浮點數的函數,或者如果您幸運的話,可能是Rmpfrgmp程序包,這些程序包會執行任意精度「大數」數學,可能有浮動,以二進制工具

通過這個被貼了,會有人已經暴露通過發佈現有的功能,W /我的運氣我的無知的時間

編輯 - 。如可能的包pack

+1

作爲[pack](http://cran.r-project.org/web/packages/pack/)的作者,我會很感激任何補丁和/或增強功能。我把這個軟件包寫在另一個軟件包中......另一個軟件包現在已經過時了,但我仍然認爲pack可能對其他軟件有用。 –

+0

@JoshuaUlrich看到我的答案,如果你認爲它是相關的,你可以在你的包裝中使用它。 –

0

我需要一個轉換器之間的雙打和十六進制數字。我寫這些,可能是幫助他人

doubleToHex <- function(x) { 
    if(x < 16) 
    return(sprintf("%X", x)) 

    remainders <- c() 
    while(x > 15) { 
    remainders <- append(remainders, x%%16) 
    x <- floor(x/16) 
    } 
    remainders <- paste(sprintf("%X", rev(remainders)), collapse="") 
    return(paste(x, remainders, sep="")) 
} 

hexToDouble <- function(x) { 
    x <- strsplit(x,"")[[1]] 
    output <- as.double(0) 
    for(i in rev(seq_along(x))) { 
    output <- output + (as.numeric(as.hexmode(x[i]) * (16**(length(x)-i)))) 
    } 
    return(output) 
} 

doubleToHex(x = 8356723) 
hexToDouble(x = "7F8373") 

尚未得到廣泛的測試過,讓你檢測出了問題我知道。