Hi,
Try converting to strings e.g:
irb(main):004:0> (0.05 + 0.01).to_s == 0.06.to_s
=> true

BR
Davor

On 31 Aug, 14:02, "Robert Klemme" <shortcut... / googlemail.com> wrote:
> 2007/8/31, Pe?a, Botp <b... / delmonte-phil.com>:
>
>
>
>
>
> > From: Robert Klemme [mailto:shortcut... / googlemail.com]
> > # And who decides about the size of epsilon and which algorithm to
> > # choose?  There is no one size fits all answer to that hence leaving
> > # Float#== the way it is (i.e. compare for exact identical values) is
> > # the only viable option.  Otherwise you would soon see similar
> > # questions on the list, i.e., "how come it sometimes works and
> > # sometimes it doesn't".  And they become more difficult to answer as
> > # the cases are likely less easy to spot / explain.
>
> > indeed :(
>
> > maybe i'm not "realistic" but i thought
>
> >    0.05 + 0.01 == 0.06  => false
>
> > was "unrealistic" enough for a simple and plain 2 decimal arithmetic. Even people w zero-know on computers would laugh about it (yes, try explaining it to your wife or kids, eg).
>
> That's probably the exact reason why not your wife or kids write
> software but people who are (hopefully) experts.  :-)  If you study
> computer sciences you'll typically hit the topic of numeric issues at
> some point.
>
> > For simple math (eg those dealing w money):
> >   i can live w slowness in simple math (quite a paradox if you ask me).
> >   i can live w 1/3 == 0.3333333333 =>false
> >   or that  sqrt(2) ==  1.1414213562 => false
> >   i use bigdecimal. bigdecimal handles 0.05 + 0.01 == 0.06  => true
>
> > For complex math,
> >   i can live w slowness (no question there).
> >   bigdecimal easily handles sqrt(2) at 100 digits:   2.sqrt(100) => #<BigDecimal:b7d74094,'0.1414213562 3730950488 0168872420 9698078569 6718753769 4807317667 9737990732 4784621070 3885038753 4327641572 7350138462 309122925E1',124(124)
> >   so yes, i still use bigdecimal for complex math.
>
> > so regardless, of whether its simple or complex (or "highly precise" or not), i use bigdecimal. counting ang looping otoh has no problem w me since fixnum/bignum handles this flawlessly. (Also, note that big RDBMS like oracle and postgresql use BCD and fixed pt math for numerics).
>
> > So, my question probably is (maybe this could be addressed to Matz): How can i make ruby use a particular arithmetic, like bigdecimal eg, so that literals like 1.05, and operations like 1+1.01 are now handled as bigdecimals.
>
> Well, you could provide your formula as strings and convert it to
> something that creates BigDecimals along the way, like
>
> irb(main):015:0> "0.01+0.05".gsub(%r{\d+(?:\.\d*)?}, "BigDecimal.new('\\&')")
> => "BigDecimal.new('0.01')+BigDecimal.new('0.05')"
> irb(main):016:0> eval("0.01+0.05".gsub(%r{\d+(?:\.\d*)?},
> "BigDecimal.new('\\&')"))
> => #<BigDecimal:7ff6dd60,'0.6E-1',4(12)>
>
> # note this is of course not a proper solution since the RX does not
> match all valid floats
>
> Kind regards
>
> robert- D?lj citerad text -
>
> - Visa citerad text -