William James
1/20/2007 7:02:00 AM
Drew Raines wrote:
> Wolfgang Nádasi-Donner wrote:
>
> > irb(main):001:0> 3930-39.30*100
> > => 4.54747350886464e-013
> >
> > Rounding errors are typical for floating point numbers. In this case
> > the result of -39.30*100 ist a little bit smaller than 3930, so to_i
> > works correct.
>
> When I think of rounding error, I think of lost precision due to
> rounding too early in a series of floating point calculations. When
> multiplying a non-repeating Float point by 100, shouldn't the decimal
> move over two places without introducing extra precision?
>
> And how can 39.30*100 really be 3930.000000000000454747350886464...,
Almost all programming languages use binary floating point, so 0.30
can't be
represented exactly. A very few languages use binary-coded decimal.
Examples: Decimal BASIC and Business BASIC (I think). The BASIC
that came with the old 8-bit Atari used binary-coded decimal, so it
would
have had no problem with 3930-39.30*100.
Since computers of today are so much faster than 8-bit computers,
one would think that they could afford to incur the speed penalty
associated with binary-coded decimal.