부동 소수점 숫자의 정확성 문제 극복
컴퓨팅에서 널리 사용되는 데이터 유형인 부동 소수점 숫자는 잠재적인 정확성 문제를 제시합니다. 기계의 본질적인 표현에. 이 문제를 설명하려면:
#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을 정확하게 나타낼 수 없습니다.
문제 해결
솔루션에서 강조한 바와 같이 , 부동 소수점 연산으로 정확한 동일성을 달성하는 것은 사실상 불가능합니다. 대신 허용 가능한 범위 내에서 값을 비교하는 것이 좋습니다. 특정 시나리오에서는 특정 값을 부동 소수점 숫자로 정확하게 표현할 수 없다는 점을 인식하는 것이 중요합니다.
권장 리소스
자세한 내용은 다음 참조 자료를 참조하세요.
위 내용은 부동소수점 산술의 정확성 문제를 어떻게 극복할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!