IT

Double.MIN_VALUE가 음수가 아닌 이유

lottoking 2020. 6. 14. 10:06
반응형

Double.MIN_VALUE가 음수가 아닌 이유


Double.MIN_VALUE실제로 실제로 Doubles가 취할 수있는 최소값이 아닌 이유에 대해 누구나 알 수 있습니까? 양수 값이며 Double은 음수 일 수 있습니다.

유용한 숫자 인 이유를 이해하지만 특히와 비교할 때 매우 직관적이지 않은 이름 인 것 같습니다 Integer.MIN_VALUE. 그것을 Double.SMALLEST_POSITIVE또는 MIN_INCREMENT이와 유사한 것으로 부르면 의미가 더 명확합니다.

또한 Doubles가 취할 수있는 최소값은 얼마입니까? 그렇 -Double.MAX_VALUE습니까? 문서가 말하지 않는 것 같습니다.


IEEE 754 형식에는 부호 용으로 예약 된 1 비트와 크기를 나타내는 나머지 비트가 있습니다. 이것은 오리고를 중심으로 "대칭"을 의미합니다 (음수 값이 하나 더있는 정수 값과 반대). 따라서 최소 값은 부호 비트가 변경과 함께, 그래서 단순히 최대 값과 동일 , -Double.MAX_VALUE당신이 함께 표현 할 수있는 가능한 가장 작은 실제 숫자입니다 double.

나는 최대 크기Double.MAX_VALUE 로 보여야 한다고 생각하는데 ,이 경우 실제로 단순히 쓰는 것이 합리적 이다. 또한 최소 양의 값을 나타내는 최소 양의 값인 이유를 설명합니다 .-Double.MAX_VALUEDouble.MIN_VALUE

그러나 나는 이름이 약간 오해의 소지가 있음에 동의합니다. 의미에 익숙해 Integer.MIN_VALUE져서 표현할 수있는 Double.MIN_VALUE가장 작은 절대 값을 읽었을 때 나는 약간 놀랐습니다 . 아마도 그들은 단순히 가능한 한 최소한의 값을 나타내는 상수를 갖는 것이 불필요하다고 생각했을 -것입니다 MAX_VALUE:-)

(또한 Double.NEGATIVE_INFINITY"특별한 경우"로 보이며 실제로 실제 숫자를 나타내지 않기 때문에 이것을 무시하고 있습니다.

여기 주제에 관한 좋은 글이 있습니다.


이 상수는 부호와 관련이 없습니다. Double을 Sign, Exponent 및 Mantissa의 세 부분으로 구성하면 더 합리적입니다. Double.MIN_VALUE는 실제로 0으로 플러시하기 전에 지수가 최소값에있을 때 가수가 가정 할 수있는 가장 작은 값입니다. 마찬가지로 MAX_VALUE는 무한대에 플러시가 발생하기 전에 지수가 최대 값에있을 때 Mantissa가 가정 할 수있는 가장 큰 값으로 이해 될 수 있습니다.

이 두 가지에 대한보다 구체적인 이름은 가장 큰 절대 값 ( verbositiy에 0이 아닌 값 추가 )과 가장 작은 절대 값 (verbositiy에 대한 무한대 추가) 일 수 있습니다.

자세한 내용 IEEE 754 (1985) 표준을 확인하십시오. 개정 된 (2008) 버전이 있지만, Java에서 지원하지 않는 더 많은 형식 만 소개합니다 (엄격히 말하면 java는 다른 많은 고급 언어와 마찬가지로 IEEE 754 1985의 일부 필수 기능에 대한 지원이 없음).


혼란스러운 이름을 가장 작은 양수로 정의 된 C추적 할 수 있다고 가정합니다 FLT_MIN.

Java에서와 같이을 -Double.MAX_VALUE사용해야 -FLT_MAX하는 경우 C에서 가장 작은 부동 소수점을 얻는 데 사용해야 합니다.


부동 소수점 숫자 의 경우 정확한 범위 가 없으므로 정밀도 가 중요 합니다 .

/**
 * A constant holding the smallest positive nonzero value of type
 * <code>double</code>, 2<sup>-1074</sup>. It is equal to the
 * hexadecimal floating-point literal
 * <code>0x0.0000000000001P-1022</code> and also equal to
 * <code>Double.longBitsToDouble(0x1L)</code>.
 */

그러나 나는 아마도 더 나은 것으로 명명되었을 것입니다 :)


double의 최소값은 Double.NEGATIVE_INFINITY이것이 Double.MIN_VALUE실제로 최소값이 아닌 이유 입니다 Double.

double은 부동 소수점 숫자이므로 가장 큰 숫자 (정밀도가 낮은) 또는 0에 가장 가까운 숫자 (정밀도가있는) 만 가질 수 있습니다.

무한대가 아닌 double의 최소값을 정말로 원한다면을 사용할 수 있습니다 -Double.MAX_VALUE.


는 말한다으로 문서 ,

Double.MIN_VALUE는 double 유형 의 가장 작은 POSITIVE 0이 아닌 값 2 ^ (-1074)를 유지하는 상수 입니다.

여기서 요점은 부동 소수점 숫자 표현에 대해 이야기하고 있습니다. 배정도 데이터 형은 배정도 64 비트 IEEE 754 부동 소수점입니다. 부동 소수점은 1,000,000,000,000 ~ 0.0000000000000001의 숫자를 쉽게 나타내며 스케일의 양쪽 끝에서 정밀도 (자릿수)를 최대화합니다. (기타 참조 들어 이것을 )

항상 양수 가수는 , 부동 소수점 숫자의 유효 숫자를 보유하고 있습니다. 지수는 가수와 부호를 곱해야하는 기수의 양수 또는 음수를 나타냅니다. 부동 소수점 값을 얻기 위해 다음 네 가지 구성 요소가 결합됩니다 .

여기에 이미지 설명을 입력하십시오

Think that the MIN_VALUE is the minimum value that the mantissa can represent. As the minimum values of a floating point representation is the minimum magnitude that can be represented using that. (Could have used a better name to avoid this confusion though)

123 > 10 > 1 > 0.12 > 0.012 > 0.0000123 > 0.000000001 > 0.0000000000000001


Below is just FYI.

Double-precision floating-point can represent 2,098 powers of two, from 2^-1074 through 2^1023. Denormalized powers of two are those from 2^-1074 through 2^-1023; normalized powers of two are those from 2^-1022 through 2^1023. Refer this and this.

참고URL : https://stackoverflow.com/questions/3884793/why-is-double-min-value-in-not-negative

반응형