모든 정수 값이 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!