Microsoft KB Archive/57479

From BetaArchive Wiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Knowledge Base


INFO: fmod() Results Unexpected Due to Binary Representation

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