Weird problem

Why is the last expression false?

class Part
        attr_reader :x, :y, :x2, :y2

        def height
                y2 - y
        end

        def initialize(x, y, x2, y2)
                @x, @y, @x2, @y2 = x, y, x2, y2
        end
end

part = Part.new(200.40, 248.32, 417.0, 306.52)

puts "part.height == #{part.height.inspect}" # part.height == 58.2

p part.height == 58.2 #-> false !!??

Same reason in pretty much every other language. Floating point arithmetic is imprecise.

p part.height - 58.2 #-> -1.4210854715202e-14

If you look in test/unit/assertions.rb you'll find assert_in_delta(f1, f2, d) for exactly this reason.

···

On May 31, 2005, at 2:10 AM, Erik Terpstra wrote:

Why is the last expression false?
...
p part.height == 58.2 #-> false !!??

--
ryand-ruby@zenspider.com - Seattle.rb - Seattle.rb | Home
http://blog.zenspider.com/ - http://rubyforge.org/projects/ruby2c

Ryan Davis wrote:

Same reason in pretty much every other language. Floating point
arithmetic is imprecise.

p part.height - 58.2 #-> -1.4210854715202e-14

If you look in test/unit/assertions.rb you'll find assert_in_delta (f1,
f2, d) for exactly this reason.

Thanks a lot, I should have known this.

Cheers,

Erik.