2016-08-07 6 views
0

R에 더 큰 숫자를 추가 할 때 문제가 발생합니다. 더 작은 값은 무시되고 잘못된 결과가 나타납니다.R 큰 숫자와 작은 숫자가 더 작은 값을 무시합니다.

예를 들어, 여기에있는 10 진수 변환기의 이진수 (Convert binary string to binary or decimal value)를 사용하고 있습니다.

2^(which(rev(unlist(strsplit(as.character(MyData$Index[1]), "")) == 1))-1) 
[1] 1   2   32   64   256   2048   ... 

나는 길이 목적을 위해 모든 수를 포함하지 않았지만,이 숫자는 합산 할 때, 그들은 진수의 정수 값을 얻을 것입니다 : 끝에서 두 번째 단계는 다음과 같습니다. 올바른 결과는 4,919,768,674,277,575,011이어야하지만 R은 4,919,768,674,277,574,656의 결과를 제공합니다. 이 숫자는 처음 5 개의 나열된 숫자의 합계 인 355만큼입니다.

정수 제한과 관련이 있다고 생각했지만 테스트 한 결과 R은 필요한 것보다 많은 수를 처리 할 수 ​​있습니다. 여기서 다시 잘못된 결과를 굴복 내가 시도 뭔가의 예

2^64 
[1] 18446744073709551616 #Correct Value 
2^65 
[1] 36893488147419103232 #Correct Value 
2^64 + 2^65 
[1] 55340232221128654858 #Correct Value 
2^64 + 2^65 + 1 
[1] 55340232221128654858 #Incorrect Value 

많은 수의 추가의 정밀도 문제의 어떤 종류가있을 것 같다,하지만 난 수 있도록이 문제를 해결할 수있는 방법을 모른다 원하는 결과를 얻을 수 있습니다.

도움을 주시면 감사하겠습니다. 부적절한 형식이있는 경우 사과 드리며, 사이트의 첫 번째 게시물입니다.

답변

2

큰 정수의 경우, 우리는 gmp

library(gmp) 
as.bigz(2^64) + as.bigz(2^65) + 1 
# Big Integer ('bigz') : 
#[1] 55340232221128654849 
에서 as.bigz을 사용할 수 있습니다
관련 문제