I am having an issue with a simple floating point application.  I am setting a 
variable to a specific value and immediately after I set it,  it is not exactly 
what I set it to.  Here's an example

   Draw_GX_Min:=999.999;
   Writeln(Draw_GX_Min:3:30);

The writeln results in 999.999000000000020000000000000000  

Why is it not  999.999000000000000000000000000000  where did 0.00000000000002 
come from?

Draw_GX_Min is defined as a Double.  I don't need that much precision for any 
reason.   I'm just trying to understand why it's not what I set it to.

The reason I noticed this is because I have some conditional statements like
If Draw_GX_Min<>99.999 then
    Something.... 

And sometimes they works as expected, and sometimes not.
I realize I could do:

If round(Draw_GX_Min*1000)<>999999 then
   Something 

and it would work, but why do I need to do this when I explicitly set it to 
999.999?

Does anyone know what is going on here that would be kind enough to explain it 
to me?

I suspect this has something to do with floating point, but I don't really 
understand what's happening.

Is there a better way to define my variable, perhaps defined as fixed decimal 
point instead of allowing it to float....  so that say all numbers from 
-999.99999 to 999.99999 are guaranteed to be represented accurately to 5 
decimal places so that if I set one to 999.99999 it would actually be 999.99999 
exactly?  I would rather have less precision but have variables retain exactly 
what they are set to, not something close

Thanks

James




_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to