From: Marc-Andre Lafortune Date: 2010-07-22T00:55:39+09:00 Subject: [ruby-core:31407] [Bug #3589] Converting Bignums to Float for equality checks is wrong Issue #3589 has been updated by Marc-Andre Lafortune. Category set to core Hi, On Wed, Jul 21, 2010 at 9:52 AM, Tomasz Wegrzanowski wrote: > And r1800 is wrong. 100000000000000000000000.to_f is a precise number 99999999999999991611392, > and it doesn't equal 100000000000000000000000 any more than 10.2.to_i equals 10.2. You should think of floats as a range of values. For example, the float 10.2 is a range of value and the mathematical value 10.2 is simply the one that has the smallest decimal form. That range of value does not contain 10, so in Ruby `10 != 10.2` One the other hand, the float 100000000000000000000000.to_f is a range that contains both the integer 99999999999999991611392 and the integer 100000000000000000000000. The fact that the binary representation of 100000000000000000000000.to_f corresponds to 99999999999999991611392 is not important here; one the conversion to a float is done, there is no way to know which exact number was supposed to be represented, if any. Please refer to previous discussions about floats, for instance: http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/25662 -- Marc-Andr�� ---------------------------------------- http://redmine.ruby-lang.org/issues/show/3589 ---------------------------------------- http://redmine.ruby-lang.org