Article ID: 57479
Article Last Modified on 12/11/2003
APPLIES TO
- The C Run-Time (CRT), when used with:
- Microsoft Visual C++ 1.0 Professional Edition
- Microsoft Visual C++ 1.5 Professional Edition
- Microsoft Visual C++ 1.0 Professional Edition
- Microsoft Visual C++ 2.0 Professional Edition
- Microsoft Visual C++ 4.0 Standard Edition
- Microsoft Visual C++ 5.0 Standard Edition
- Microsoft Visual C++ 6.0 Service Pack 5
This article was previously published under Q57479
Although there isn't a problem with the fmod() function, the following program generates incorrect results when the divisor, f2, cannot be precisely represented in binary.
Sample Code
/* Compile options needed: none / #include <stdio.h> #include <math.h> void main(void) { double f1, f2, f3; scanf("%lf %lf", &f1, &f2); f3 = fmod(f1, f2); printf("f3 = %.15lf\n", f3); }
To illustrate the problem, enter the values 2.0 and 0.2 for f1 and f2, respectively. The fmod() function should return 0 (zero), the floating-point remainder of 2.0/0.2. Instead, it returns the value 0.2 because 0.2 does not translate cleanly into binary representation. A value of 0.25 for f2 works correctly because it does translate precisely into binary.
Keywords: kbinfo kbcrt kbcode KB57479