On Jun 21, 2007, at 8:48 PM, Gregory Brown wrote: > On 6/21/07, Michael W. Ryder <_mwryder / worldnet.att.net> wrote: >> A simple way to get the correct figure is to do what is used often >> with >> currency to prevent these types of errors. If I enter 'puts >> 1495.0*6.0/1000.0' I get 8.97. The only thing necessary is to keep >> track of the number of decimal points. > > Much better is to store the numbers as integers and convert to > decimal, guaranteeing zero loss. Which are just different ways of saying "fixed point numbers" that matz had at the top of his list. Believe me when I tell you that dealing with fixed point can be challenging. I worked on part of an air traffic control system about 20 years ago that used 16-bit values where the LSB for a distance value represented 1/256nm (nautical mile). There was no floating-point co-processor in the M68000-based systems and the C code was compiled with a special, non-standard compiler that would do things like (16-bits * 16-bits)/16-bits was assumed to produce a 16-bit result unless you had a typecast to indicate otherwise. The other way to get truth from 14.95*0.6 == 8.97 is to use less precise representations than you get with a typical Float. Of course, that's going to be a problem as the numbers get bigger ;-) -Rob Rob Biedenharn http://agileconsultingllc.com Rob / AgileConsultingLLC.com