Robert Walker wrote in post #970390:
> Marnen Laibow-Koser wrote in post #970377:
>> Then use fixed-point math.  IEEE floats are 100% inappropriate for any
>> sort of mathematical calculation.  And who cares how fast they are if
>> they're inaccurate?  Inaccurate engineering calculations are worse than
>> none at all -- do *you* want to drive over that bridge? :)
>
> Let's break this down to a comparison of accuracy vs. precision.
>
> Take for example the value 1/3.
>
> First using floating point math:
>
> x = 1.0
> => 1.0
> y = 3.0
> => 3.0
> z = x / y
> => 0.3333333333333333
>
> Now with Ruby's BigDecimal math:
> x = BigDecimal.new('1')
> => #<BigDecimal:102c078,'0.1E1',4(8)>
> y = BigDecimal.new('3')
> => #<BigDecimal:10388f0,'0.3E1',4(8)>
> z = x / y
> => #<BigDecimal:103680c,'0.33333333E0',8(16)>
>
> In the case of float we have 16 decimal digits of precision, but in the
> case of BigDecimal we have only eight digits of precision.

Are you sure?  Or are only eight digits displayed?

>
> Yes, in the case of BigDecimal we have a value representing "precisely"
> the value 0.33333333, but that result is obviously less accurate than
> the result of the floating point calculation.

Not obvious at all, since I don't know how many 3s the BigDecimal is 
*actually* storing.

>
> Over large aggregations this can make a difference.

Yes, it certainly can.

> It is certainly the
> case that IEEE floats introduce error due to the inherent storage
> limitations, but doing precise mathematics as fixed point has it's own
> complications as well.

Sure.  BigDecimal is the best of both worlds.

>
> Ruby's BigDecimal class does not provide the needed accuracy for complex
> mathematics.

Of course it does.  Why do you think it does not?

Anyway, if you need more than BigDecimal, then start climbing into the 
realms of symbolic math with Rational.

> The difference is that BigDecimal always stores precise
> values within the limits of it storage space. Where floats store
> imprecise representations, but representations with a fixed precision.
>
> I don't think either of these classes are appropriate for the sort of
> math mentioned above.

Why is BigDecimal inappropriate?  What would you use instead?

> But, they both have their uses.

I'm not sure Float has a proper use case at all. :)

Best,
-- 
Marnen Laibow-Koser
http://www.marnen.org
mar...@marnen.org

Sent from my iPhone

-- 
Posted via http://www.ruby-forum.com/.

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to rubyonrails-t...@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to