매개 변수와 함께 사용할 때 while 루프의 조건에 "적합"하지 않는 fmod()에 문제가 있습니다. 아래의 스 니펫을 재 작성했는데, 이는 주 프로그램과 동일한 오류를 발생시킵니다.Fmod While While 루프 조건 오류
#include <math.h>
int main()
{
double foo = 223.76;
double bar = foo;
while(fmod(bar,1.00) != 0)
{
bar += foo;
}
cout << bar << endl;
}
위의 코드는 결국 5594를 중지하고 인쇄해야하지만 대신 수백만 개가 계속됩니다. 각 단계에서 막대의 값을 인쇄하면 실제로 5594 (테스트하려는 경우 약 25 단계가 소요됨) 값에 도달하므로 실제로 멈추지 않는 이유를 알 수 없습니다.
불규칙한 값의 합계를 반복하고 정확한 숫자와 비교하여 부동 소수점 프로그래밍의 추기경 죄 (the Cardinal Sins of Floating Point Programming). 이것은 결코 작동하지 않습니다. 쉬운 솔루션을 위해 100을 곱하십시오. –
'223.76'은 2의 거듭 제곱 인 경우에만 (일반 C++ 구현으로) 정확하게 표현할 수 있습니다. –
글쎄, 나는 0.00과 비교해 봤다. 그 결과는 어느 쪽이든 끝났다. –