> 백엔드 개발 > C++ > Doubles는 모든 정수 값을 정확하게 나타냅니까?

Doubles는 모든 정수 값을 정확하게 나타냅니까?

Susan Sarandon
풀어 주다: 2024-10-29 19:36:30
원래의
1063명이 탐색했습니다.

Do Doubles Accurately Represent All Integer Values?

모든 정수 값이 Double로 정확하게 표현됩니까?

정수를 Double로 변환하면 완벽한 표현을 유지할 수 있을지 의문이 듭니다. 이 기사에서는 부동 소수점 산술에 대한 IEEE 754 표준을 고려하여 이 쿼리를 다룹니다.

이중 표현

더블은 몇 가지 비트를 사용하는 가수 * 2^지수 형식을 사용합니다. 정수가 아닌 부분에 대해. 지수를 충분히 크게 설정하면 분수 부분만 사용하여 정수를 표현할 수 있습니다.

32비트 정수

IEEE 754 배정밀도는 최대 53까지의 정수를 수용할 수 있습니다. 비트(52개의 유효 비트와 암시적 선행 비트). 따라서 모든 32비트 정수는 double로 완벽하게 표현될 수 있습니다.

64비트 정수

그러나 이 보장은 64비트 정수로 확장되지 않습니다. 크기가 이중 표현의 용량을 초과합니다.

실제 예

이 개념을 설명하려면 다음 코드 조각을 고려하세요.

<code class="cpp">int a = 3;
int b = 4;
double d_a = a;
double d_b = b;
double int_sum = a + b;
double d_sum = d_a + d_b;

if (double(int_sum) == d_sum)
{
    std::cout << "Same" << std::endl;
}</code>
로그인 후 복사

이 코드 은 32비트 정수에 대해 일관되게 "동일"을 출력하여 double로 보존된다는 것을 보여줍니다.

소수 차이

고려해야 할 또 다른 측면은 double의 가능성입니다. 나중에 정수로 다시 변환하는 동안 손실되는 분수 차이를 도입하는 변환입니다. 그러나 이중 표현의 기하급수적 특성으로 인해 이는 불가능합니다. 두 double 사이의 가장 작은 차이는 항상 2의 거듭제곱이므로 반올림으로 인해 정수 값이 변경되지 않습니다.

결론

32비트 정수는 double로 완벽하게 표현될 수 있지만 64비트 정수에는 해당되지 않습니다. 그럼에도 불구하고 배정밀도는 대부분의 실제 정수 응용 분야에 충분한 용량을 제공합니다.

위 내용은 Doubles는 모든 정수 값을 정확하게 나타냅니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿