C/C++에 부동 소수점 숫자 관리 문제가 있다고 들었습니다. 간단한 프로그램을 구현했습니다. 그것은 변경 기계로 구성됩니다 : 사용자가 청구 금액 및 지불 수량을 입력하고 프로그램은 각 동전 유형에 대한 동전의 수를 계산하여 계산합니다. Link to my google drive folder with the codeC++에서 float 또는 double 숫자를 사용하여 작업합니다. 표현의 오류. 십진수 값의 손실
건이며,이 아닌 정수 값을 삽입 할 때, 프로그램이 루프에 입력하고 끝나지 않아 : 여기
는 코드입니다. 나는 무엇이 진행되고 있는지를 알기 위해 변수의 내용을 인쇄했으며, 어떻게 든 2 진수 값에서 0.10이라고 가정하자. 프로그램은 그 값을 0.0999998로 변경한다. 그런 다음 처리 할 나머지 변경 사항은 0이 아니며 무한 루프로 입력됩니다.나는 이것이 플로트 포인트 번호의 기계 표현 때문이라고 들었습니다. 나는 동일한 창과 리눅스를 실험했다. 또한 자바로 프로그래밍하지만 파스칼에서도 같은 문제가 있었던 것을 기억하지 못합니다.
음, 이제 질문이 있습니다.이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 나는 가능한 해결책 중 하나가 외부 라이브러리를 통해 고정 소수점 표현을 사용하고 있다고 생각했습니다 : http://www.trenki.net/content/view/17/1/ 또는 http://www.codef00.com/code/Fixed.h. 다른 사람은 다음과 같이 정밀도 산술 라이브러리를 사용하는 것입니다. GMP
코드는 여기에 게시되어야합니다. 그렇지 않으면 질문에 영구적 인 가치가 없으며 삭제에 대한 책임이 있습니다. – EJP
달러의 부동 소수점 숫자로 작업하지 마십시오. 단순한 정수 센티미터로 작업하십시오. – enhzflep
Akronix, 다음에 링크를 게시하지 마십시오. 코드가 너무 많으면 테스트 할 수있는 예제를 만듭니다. – yizzlez