> 백엔드 개발 > C++ > 배정밀도 숫자가 소수점 이하 15자리보다 더 정확해 보이는 이유는 무엇입니까?

배정밀도 숫자가 소수점 이하 15자리보다 더 정확해 보이는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-30 18:04:16
원래의
700명이 탐색했습니다.

Why Do Double-Precision Numbers Seem More Precise Than 15 Decimal Places?

이중 정밀도 소수 자릿수

질문:

배정밀도 값이 소수점 이하 15자리의 정밀도를 사용하면 내부 값이 더 높은 정밀도를 나타내는 경우가 많습니다. 이러한 불일치가 관찰되는 이유는 무엇입니까?

답변:

IEEE double은 53개의 유효 비트를 가지며 약 15.95자리의 정밀도를 제공합니다(공식 log10(253)). 이 이론적 정밀도는 DBL_DIG 상수로 표시된 10진수 15자리보다 약간 더 큽니다. 추가 정밀도는 추가 유효 비트로 설명됩니다.

nextafter() 함수는 주어진 double의 실제 정밀도를 보여줍니다. 주어진 값에 가장 가까운 표현 가능한 숫자를 계산하면 배정밀도 값의 유효 숫자가 일반적으로 16개임을 알 수 있습니다.

이를 보여주는 프로그램은 다음과 같습니다.

#include <cstdio>
#include <cfloat>
#include <cmath>

int main() {
    double x = 1.0/7.0;
    printf("FLT_RADIX = %d\n", FLT_RADIX);
    printf("DBL_DIG = %d\n", DBL_DIG);
    printf("DBL_MANT_DIG = %d\n", DBL_MANT_DIG);
    printf("%.17g\n%.17g\n%.17g\n", nextafter(x, 0.0), x, nextafter(x, 1.0));
}
로그인 후 복사
일반적으로 출력은 다음과 같습니다. :

    1.0/7.0은 약 16개의 유효 숫자로 표현됩니다.
  • 마지막 16진수 비트는 연속된 값에 대해 0과 1 사이에서 번갈아 나타납니다.
  • 1.0/7.0(0.142857142857142857)의 수학적 값은 대략 배정밀도로만 표시됩니다.

위 내용은 배정밀도 숫자가 소수점 이하 15자리보다 더 정확해 보이는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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