ID Number: Q57479
5.10 6.00 6.00a 6.00ax 7.00 | 5.10 6.00 6.00a
MS-DOS | OS/2
Summary:
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);
}
More Information:
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.
Additional reference words: 5.10 6.00 6.00a 6.00ax 7.00 s_quickc