,에 IEEE 754 호환 플랫폼에서 R의 두 배 (예를 x86)의 FP 정밀도가 매우 16 진수 아니기 때문에 :
# Machine ULP in decimal digits...
.Machine$double.ulp.digits * log10(2)
-15.65...
# Note the direct relationship between ULP digits and EPS:
.Machine$double.ulp.digits = -52
2.22 e-16 = .Machine$double.eps == 2^.Machine$double.ulp.digits
는 따라서 1 - 1e-16
이미 매우 가까이 ULP로, 1 - 1e-17
은 ULP를 넘어서고 FP 1.0으로 반올림됩니다.
.Machine : "Numerical Characteristics of the Machine"에 대한 R 설명서를 참조하십시오. 특히 EPS와 ULP의 차이점을 살펴보십시오.
(ULP가 정의 WRT 나 PF 번호 1. 더 큰 당신의 FP 번호가 도착, 마지막 비트의 값이 크면 클수록, 그리고 라운딩 작업이 더 많은 원유) 여기서 양 1e-에 관해서는
323은 다음과 같습니다 : 당신은 ULP를 최소한의 FP 값으로 혼동하고 있습니다.
최소 표현할 수있는 표준화 된 양의 FP 값이는
# Minimum-representable normalized positive FP value is...
.Machine$double.xmin
2.225..e-308
# ...which would correspond to this base-2 exponent...
log10(.Machine$double.xmin)/log10(2)
-1022
# ...or this base-10 exponent...
.Machine$double.min.exp * log10(2)
-307.65...
... IEEE 754 Double-precision examples에 따라, 지수 전자 (308)이있다 그러나 우리는, 즉 비 표준화 FP 번호를 사용하는 경우 우리는 약간 작은 얻을 수 있습니다 따라서 모든 선행 가수트 비트는 0입니다. 따라서 경험적으로 발견 한대로 최소 정규 표현식의 양수 FP 값은 1e-324와 1e-323 사이입니다. 52 개의 가수가 있기 때문에 LSB의 수치는 2^51 또는 10^15입니다.35 작은 :
# Exponent of Minimum-representable UNnormalized positive FP value
log10(.Machine$double.xmin) - (.Machine$double.digits * log10(2))
-323.607...
(왜 우리가하지 경험적으로 정확히를 발견 할 수있는 IEEE-754은 내부적으로 반올림하기 전에 몇 가드 자리를 전달하기 때문에?)
표현 말한다
(주 또한 매개 변수가베이스-2 : .Machine$double.base = 2
)
예, 이것은 [R FAQ 7.31] (http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-thinkn-0027t-R-think-the- number- number -are-equal_003f) –
특히,'options (digits = 22);를 시도하십시오. x <-1-1e-16; y <-1-1e-17 == 1; 인쇄 (y); print (x)' –
@DavidArenburg 귀하가 제공하는 "중복"은 동일한 질문이라고 생각하지 않습니다. OP는 똑같이 나타낼 필요가있는 어떤 가치에 대해 놀랍지 만 0에 가깝고 1 근처에 표현 가능한 숫자의 밀도에 대해 놀란다고 말하는 것 같지 않습니다. –