Microsoft KB Archive/57479

= 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</li></ul>

 Microsoft Visual C++ 4.0 Standard Edition</li></ul>

 Microsoft Visual C++ 5.0 Standard Edition</li></ul>

 Microsoft Visual C++ 6.0 Service Pack 5</li></ul> </li></ul>

-

<div class="notice_section">

This article was previously published under Q57479

<div class="notice_section">

<div class="notice_section">

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 /


 * 1) include <stdio.h>
 * 2) include <math.h>

void main(void) {

double f1, f2, f3;

scanf(&quot;%lf %lf&quot;, &f1, &f2); f3 = fmod(f1, f2); printf(&quot;f3 = %.15lf\n&quot;, 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

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.