> 백엔드 개발 > C++ > 부동소수점 산술의 정확성 문제를 어떻게 극복할 수 있습니까?

부동소수점 산술의 정확성 문제를 어떻게 극복할 수 있습니까?

Linda Hamilton
풀어 주다: 2024-12-01 00:22:15
원래의
773명이 탐색했습니다.

How Can We Overcome Accuracy Issues in Floating-Point Arithmetic?

부동 소수점 숫자의 정확성 문제 극복

컴퓨팅에서 널리 사용되는 데이터 유형인 부동 소수점 숫자는 잠재적인 정확성 문제를 제시합니다. 기계의 본질적인 표현에. 이 문제를 설명하려면:

#include <stdio.h>
#include <stdlib.h>

int main() {
  char *str = "4.600";
  double mw = atof(str);
  float p = 0.2;
  float g = 0.2;
  int h = 1;

  int columns = (int)((mw - (h * 11 * p)) / ((h * 11 * p) + g)) + 1;
  printf("%f\n", (mw - (h * 11 * p)) / ((h * 11 * p) + g));
  printf("Columns: %d\n", columns);

  return 0;
}
로그인 후 복사

이 코드에서 str은 "4.600"의 문자열 표현이며 atof(str)를 호출하면 이를 이중 mw로 변환합니다. 후속 계산에서는 불행한 결과가 나옵니다. 4.5999999999999996의 부동 소수점 표현은 원하는 값인 4.600을 정확하게 나타낼 수 없습니다.

문제 해결

솔루션에서 강조한 바와 같이 , 부동 소수점 연산으로 정확한 동일성을 달성하는 것은 사실상 불가능합니다. 대신 허용 가능한 범위 내에서 값을 비교하는 것이 좋습니다. 특정 시나리오에서는 특정 값을 부동 소수점 숫자로 정확하게 표현할 수 없다는 점을 인식하는 것이 중요합니다.

권장 리소스

자세한 내용은 다음 참조 자료를 참조하세요.

  • [모든 컴퓨터 과학자가 부동 소수점에 대해 알아야 할 사항 연산](https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)
  • [부동 소수점 숫자 비교](https://floating-point-gui. 드/)

위 내용은 부동소수점 산술의 정확성 문제를 어떻게 극복할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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