최대 정수 크기 (.Machine$integer.max
을 입력하여 찾을 수 있음)보다 큰 정수를 입력하면 R은이를 2 배로 강제 변환합니다. 또한 2^64 고유 한 이중 값만 있습니다. 2^64는 약 1.84 * 10^19이고 입력 한 숫자는 10^21입니다. 그러나 이중 64 비트는 모두 정밀 비트가 아닙니다. 그 중 하나는 부호 비트이고, 11 개는 가수 (즉, 지수 비트)이다. 따라서 52 비트의 정밀도 만 얻으면 소수 또는 15 자리로 변환됩니다. R :
> for(i in 10:20)
cat(i,10^i == 10^i+1,"\n")
10 FALSE
11 FALSE
12 FALSE
13 FALSE
14 FALSE
15 FALSE
16 TRUE
17 TRUE
18 TRUE
19 TRUE
20 TRUE
따라서 약 15 자리 뒤에 두 배로 계산 된 정밀도가 소진됩니다. R에서 더 높은 정밀도의 산술 연산을 수행하는 것이 가능하지만이 기능을 제공하는 라이브러리를로드해야합니다. 그러한 라이브러리 중 하나는 gmp
입니다.
> library(gmp)
> x<-as.bigz("-1128347132904321674821")
> y<-as.bigz("-1128347132904321674822")
> x<y
[1] FALSE
> x>y
[1] TRUE
> x==y
[1] FALSE
> x==y+1
[1] TRUE
아마도 Rmpfr과 같은 대규모 산술 패키지를 사용해야 할 것입니다. 저는 R이 64 비트 복소수를 사용하여 16-17 자릿수의 유효 자릿수를 나타내는 이러한 큰 정수를 나타낼 것이라고 생각합니다. –
'R 3.x '에 있는지 확인하십시오. –