On 11/12/06, bradjpeek <bradjpeek / gmail.com> wrote:
>
> The second edition of _The_Ruby_Way_ has an example similar to the
> following:
>
> irb(main):001:0> puts 'not equal' unless (3.2 - 2.0) == 1.2
> not equal
> =>nil
>
> The point is to illustrate why you might want to use BigDecimal (i.e.
> so 3.2 - 2.0 would in fact = 1.2).
>
> require 'bigdecimal'
> x = BigDecimal("3.2")
> y = BigDecimal("2.0")
> z = BigDecimal("1.2")
> p x - y == z ?  "equal" : "not equal"    # prints "equal"
>
> I'm fairly new to Ruby and don't do much programming, but when I saw
> this example I was surprised that the default behavior is that 3.2 -
> 2.0 != 1.2
>
> To me, this violates the "Principal of least surprise", but I guess it
> isn't a big deal because I don't remember it being discussed in
> Programming Ruby book (but it certainly may have been).
>
> Do other languages work this way?
>
>

Yep. This is pretty standard.
This article is tolerable, but rambles a bit:
http://en.wikipedia.org/wiki/Floating_point