Simple fmod-Question

M

Maic Schmidt

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)
 
K

Kai-Uwe Bux

Maic said:
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
 
P

peter koch

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).

The result is accurate, but your perception about the representation
of floating point numbers is insufficient.

/Peter
 
M

Maic Schmidt

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,901
Latest member
Noble71S45

Latest Threads

Top