# Simple fmod-Question

Discussion in 'C++' started by Maic Schmidt, Nov 28, 2008.

1. ### Maic SchmidtGuest

Hi,

2 mod 0.2 should be 0, right?
But it isnt:

#include <math.h>
#include <stdio.h>

int main(void)
{
double x=2;
double y=0.2;
printf("%g mod %g = %g\n",x,y,fmod(x,y));
return 0;
}
=> 2 mod 0.2 = 0.2

Why not?

(Visual Studio 2005/2003 on XP/W2K)

Maic Schmidt, Nov 28, 2008

2. ### Kai-Uwe BuxGuest

Maic Schmidt wrote:

> Hi,
>
> 2 mod 0.2 should be 0, right?
> But it isnt:
>
> #include <math.h>
> #include <stdio.h>
>
> int main(void)
> {
> double x=2;
> double y=0.2;
> printf("%g mod %g = %g\n",x,y,fmod(x,y));
> return 0;
> }
> => 2 mod 0.2 = 0.2
>
> Why not?

Maybe, because y is not exactly 0.2. As I see, you are printing results with
six significant digits. This may not be enough to see the differences.

Best

Kai-Uwe Bux

Kai-Uwe Bux, Nov 28, 2008

3. ### peter kochGuest

On 28 Nov., 18:47, "Maic Schmidt" <> wrote:
> Hi,
>
> 2 mod 0.2 should be 0, right?

Yes.

> But it isnt:
>
> #include <math.h>
> #include <stdio.h>
>
> int main(void)
> {
>   double x=2;
>   double y=0.2;
>   printf("%g mod %g = %g\n",x,y,fmod(x,y));
>   return 0;}
>
> => 2 mod 0.2 = 0.2
>
> Why not?

Because what you wrote as 0.2 isn't 0.2, but some number close to that
value. Just as 1/3 cant be represented precisely as a fraction,
neither can 0.2 (and 0.1 for that matter).

of floating point numbers is insufficient.

/Peter

peter koch, Nov 28, 2008
4. ### Maic SchmidtGuest

Yes, you are right,
y was 0.20000000000000001

Think a have to look carefully for rounding errors with double...

I fear of checking them for 0, because my next task is a solver for
linear equations with gauss.

Thanks

Maic

"Kai-Uwe Bux" <> schrieb im Newsbeitrag
news:493032ac\$0\$17069\$...
> Maic Schmidt wrote:
>
> > Hi,
> >
> > 2 mod 0.2 should be 0, right?
> > But it isnt:
> >
> > #include <math.h>
> > #include <stdio.h>
> >
> > int main(void)
> > {
> > double x=2;
> > double y=0.2;
> > printf("%g mod %g = %g\n",x,y,fmod(x,y));
> > return 0;
> > }
> > => 2 mod 0.2 = 0.2
> >
> > Why not?

>
> Maybe, because y is not exactly 0.2. As I see, you are printing results

with
> six significant digits. This may not be enough to see the differences.
>
>
> Best
>
> Kai-Uwe Bux

Maic Schmidt, Nov 28, 2008