The problem is that code like
x = x0 * cos(theta) + y0 * sin(theta);
y = x0 *-sin(theta) + y0 * cos(theta);
drawpixel( (int) x, (int) y);
will always give you a rotation of x0, y0 about the orgin by theta.
But on some machines you might be a pixel out. This can matter,
because if graphics don't match perfectly then you get "stitching".
But on any given machine, you ought to get the same result on multiple
tries, so you shouldn't see mismatching -- you might have a line be a pixel
different on one machine and on another, but both of the things following
that line will likely match on either machine.
And seriously, if you're looking for an example that affects most people,
you've gotta be able to find something better than floating point -- most
desktop machines have IEEE floating point and will behave identically under
reasonably normal circumstances.
Solving the problem by writing special maths routines is difficult and
shouldn't be necessary.
Fundamentally, I think the problem here is not C, but people not
understanding what C is and what it isn't.
If you want to write code which relies on functionality which
varies from one processor to another, and get the same results everywhere,
C is not the right language to use, *nor should it be*. The cost of making
that "work" would cripple C for the things it does well, and that languages
like Java do poorly.
-s