2012-10-29 5 views
0

"R.utils"패키지의 intToBin() 함수를 사용하고 있으며 큰 십진수를 이진수로 변환하는 데 문제가 있습니다.intToBin이 큰 숫자

이 오류가 발생합니다. 강제로 도입 된 NAs입니다.

큰 숫자를 처리 할 수있는 또 다른 기능이 있습니까/그러한 기능을 구현하는 알고리즘/코드가 있습니까?

감사

답변

2

당신이 intToBin에 대한 도움말 페이지를 읽는다면, 그것은 아주 명시 적으로 "정수"입력을 소요했다. 이것들은 수학적인 "정수"가 아니라 16 비트로 제한된 컴퓨터 언어 정의 int입니다.

부동 소수점 수를 2 진 부동 소수점으로 변환하는 함수를 찾거나 쓸 필요가 있습니다. 운이 좋다면 임의의 정밀도 "큰 숫자"를 사용하는 Rmpfr 또는 gmp 패키지 일 수 있습니다. 수학은 플로트 - 투 - 바이너리 도구를 가질 수있다

이, 누군가가 w 내 운/기존 기능을 게시하여 나의 무지를 노출 할 것이다 게시됩니다 시간으로

편집 -.. 아마 등을 패키지 pack

+1

[pack] (http://cran.r-project.org/web/packages/pack/)의 저자로서 어떤 패치 및/또는 개선에 감사드립니다. 그 패키지를 다른 패키지에서 사용하도록 썼습니다 ... 그리고 다른 패키지는 이제 쓸모 없지만 여전히 팩은 다른 사람들에게 유용 할 수 있다고 생각했습니다. –

+0

@ JoshuaUlrich 내 대답을 참조하십시오. 관련성이 있다고 판단되면 패키지에서 사용할 수 있습니다. –

0

복식과 16 진수 사이에 변환기가 필요했습니다. 내가 그 쓴, 당신이 그것으로 문제가 있으면 알려주세요, 또 다른

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") 

광범위하게 테스트되지 않았습니다 도움이 될 수 있습니다.

관련 문제