source

왜 Double일까요?음수가 아닌 MIN_VALUE

factcode 2022. 8. 16. 23:17
반응형

왜 Double일까요?음수가 아닌 MIN_VALUE

왜 그런지는 누가 좀 밝혀줄 수 있나요?Double.MIN_VALUEDoubles가 취할 수 있는 최소값이 아닐까요?이것은 양의 값이고, Double은 물론 음수일 수 있습니다.

왜 그것이 유용한 숫자인지 이해는 하지만, 그것은 매우 의도적이지 않은 이름처럼 보인다, 특히 비교해보면Integer.MIN_VALUE...라고 부른다Double.SMALLEST_POSITIVE또는MIN_INCREMENT또는 비슷한 것이 더 명확한 의미를 가질 수 있습니다.

또한 Doubles가 취할 수 있는 최소값은 얼마입니까?그런가요?-Double.MAX_VALUE의사들 말로는 안 하던데

IEEE 754 포맷에는 부호용으로 예약된 비트와 크기를 나타내는 나머지 비트가 있습니다.즉, origo 주위에 "대칭"이 있음을 의미합니다(음수 값이 하나 더 있는 Integer 값과 반대).따라서 최소값은 단순히 최대값과 동일하며 부호비트가 변경되어 있습니다.따라서 네,-Double.MAX_VALUE를 사용하여 나타낼 수 있는 최소의 실제 수치입니다.double.

내 생각엔Double.MAX_VALUE최대 규모로 보여져야 하며, 이 경우 단순히 단순히 쓰는 것이 말이 됩니다.-Double.MAX_VALUE또, 그 이유도 설명됩니다.Double.MIN_VALUE최소 양의 값입니다(가능한 최소 크기를 나타내기 때문에).

하지만 확실히, 나는 그 이름이 약간 오해를 불러일으킨다는 것에 동의한다.뜻에 익숙해지다Integer.MIN_VALUE저도 그걸 읽고 조금 놀랐어요.Double.MIN_VALUE나타낼 수 있는 최소 절대값입니다.아마도 그들은 그것이 단순하기 때문에 최소한의 가능한 값을 나타내는 상수를 갖는 것이 불필요하다고 생각했을 것이다.-에서 떨어져MAX_VALUE:-)

(주의:Double.NEGATIVE_INFINITY하지만 '특별한 경우'로 간주되고 실제 수치를 나타내지 않기 때문에 무시하겠습니다.)

여기 그 주제에 대한 좋은 텍스트가 있습니다.

이러한 상수는 기호와 아무런 관련이 없습니다.이것은 부호, 지수 및 Mantissa의 세 가지 부분을 합친 것으로 간주하는 경우에 더 적합합니다.두 배로.MIN_VALUE는 실제로 지수가 0으로 플러시가 발생하기 전에 최소값일 때 Mantissa가 가정할 수 있는 가장 작은 값입니다.마찬가지로 MAX_VALUE는 무한대로 플러시가 발생하기 전에 지수가 최대값일 때 Mantissa가 가정할 수 있는 가장 큰 값으로 이해할 수 있습니다.

이들 2개의 알기 쉬운 이름은 최대 절대값(verbositiy의 경우 0이 아닌 값을 추가함)과 최소 절대값(verbositiy의 경우 non-infinity를 추가함)입니다.

상세한 것에 대하여는, IEEE 754(1985) 표준을 참조해 주세요.개정된 (2008)버전이 있습니다만, Java에 의해서도 지원되지 않는 포맷이 더 많이 도입되고 있습니다(엄밀히 말하면 Java는 다른 많은 고급 언어와 마찬가지로 IEEE 754 1985의 일부 필수 기능을 지원하지 않습니다).

헷갈리는 이름은 가장 작은 양수로 정의되는 C로 거슬러 올라갈 수 있을 것 같습니다.

를 사용해야 -Double.MAX_VALUEC에서 가장 작은 플로트를 얻으려면 를 사용해야 합니다.

은 '''입니다.Double.NEGATIVE_INFINITY래그 that thatDouble.MIN_VALUE한 것은 .Double.

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

, 이 값을 사용할 수 .-Double.MAX_VALUE.

부동 소수점 숫자의 경우 정확한 범위가 없기 때문에 정밀도가 중요합니다.

/**
 * 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.MIN_VALUE는 2^(-1074) 유형의 가장 작은 의 비제로 값을 유지하는 상수입니다.

여기서 비결은 부동 소수점 숫자 표현에 대해 말하는 것입니다.더블 데이터 타입은 2배 정밀도의 64비트 IEEE 754 부동 소수점입니다.부동소수는 1,000,000,000 ~ 0.0000000000000001 사이의 숫자를 쉽게 나타내며, 스케일 양단에서 정밀도(자릿수)를 최대화합니다(자세한 내용은 이 항목을 참조하십시오).

항상 양수인 가수에는 부동 소수점 숫자의 유효 자릿수가 포함됩니다.지수는 가수와 부호를 곱해야 하는 기수의 양수 또는 음수를 나타냅니다.부동소수점 값을 얻기 위해 4개의 구성요소를 다음과 같이 조합합니다.

여기에 이미지 설명 입력

MIN_VALUE는 변위수가 나타낼 수 있는 최소값이라고 생각합니다.부동소수점 표현의 최소값은 그것을 사용하여 나타낼 수 있는 최소 크기이기 때문에 (이 혼동을 피하기 위해 더 좋은 이름을 사용할 수 있었습니다.)

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


아래는 참고 사항입니다.

배정도 부동소수는 2^-1074~2^1023의 2,098의 거듭제곱을 나타낼 수 있습니다.2의 탈규격화 파워는 2^-1074~2^-1023, 2의 정규화 파워는 2^-1022~2^1023이다.이것과 이것을 참고하세요.

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

반응형