>백엔드 개발 >C++ >배정밀도 연산에서 때때로 소수점 이하 15자리 이상의 정밀도가 표시되는 이유는 무엇입니까?

배정밀도 연산에서 때때로 소수점 이하 15자리 이상의 정밀도가 표시되는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-30 19:49:14667검색

Why Does Double-Precision Arithmetic Sometimes Show More Than 15 Decimal Places of Precision?

이중 정밀도: 확장 정밀도 이해

배정밀도 데이터 유형으로 작업할 때 대략적인 정밀도가 제한된다는 것이 일반적으로 이해됩니다. 소수점 15자리까지. 그러나 1.0/7.0과 같은 특정 유형의 숫자는 내부적으로 double로 저장될 때 소수점 17자리의 정밀도를 표시할 수 있습니다.

이러한 예외는 IEEE 이중 데이터 표현의 고유한 설계에 기인합니다. 배정밀도 값에는 53개의 유효 비트가 있으며 대략 15.95개의 십진수 정밀도를 제공합니다. 그러나 C 라이브러리는 이 값을 15로 반올림하여 이론적 정밀도가 소수점 이하 15자리가 됩니다. 실제로는 이러한 반올림으로 인해 DBL_DIG의 값이 16이 아닌 15로 설정됩니다.

이 확장된 정밀도의 의미는 nextafter() 함수를 사용하여 더욱 자세히 설명됩니다. 이 함수는 주어진 값에 가장 가까운 표현 가능한 숫자를 계산합니다. 이 함수를 사용하여 1.0/7.0의 값을 조사하면 출력에는 마지막 숫자가 다른 3개의 연속 값(0.14285714285714282, 0.14285714285714285 및 0.14285714285714288)이 표시됩니다.

마지막으로 표시된 정확한 값 숫자는 컴파일러가 수행하는 반올림 작업에 의해 결정됩니다. 이 경우 각 단계마다 숫자가 3씩 변경되어 정밀도가 십진수 약 16자리임을 나타냅니다. 따라서 double의 이론적 정밀도는 소수점 이하 15자리이지만 거의 16자리의 확장된 정밀도는 특정 유형의 계산에 더 높은 정확도를 제공합니다.

위 내용은 배정밀도 연산에서 때때로 소수점 이하 15자리 이상의 정밀도가 표시되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.