Hello all,
This is my first mail into the mailing list, so please be kind with any
errors, and please point them out so we can learn from them
Last night I was messing with some simple arithmetic operations in irb,
and
notice a funny thing: when I made subtractions (did not tested any other
operation) I did not got the expected results…
It seems that the result of floating-point subtraction is not correct…
as
if it had some residual value left in some deep decimal position…
This happens in both ruby 1.8.7 (2011-06-30 patchlevel 352) [i686-linux]
and
ruby 1.9.2p180 (2011-02-18 revision 30909) [i686-linux]
I’m I missing something?
Or is it that the results are in fact incorrect and a bug should be
reported?
If so, should I report the bug into "http://redmine.ruby-lang.org/
", or where?
Thanks in advance, Zipizap
$ ruby -v
ruby 1.8.7 (2011-06-30 patchlevel 352) [i686-linux]*
*
$ irb
ruby-1.8.7-p352 :001 > 2.45 - 1.45
=> 1.0
The last result is ok
ruby-1.8.7-p352 :002 > (0…10).map {|x| (x+0.9) - (x+0.7)}
=> [0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.200000000000001,
0.200000000000001]
The last results should all be 0.20 and they not only are different
from
0.20 but they are also ?!?different between themselves?!?
See the following “uniq” filter
This also happens in Ruby 1.9.2
ruby-1.8.7-p352 :003 > (0…10).map {|x| (x+0.9) - (x+0.7)}.uniq
=> [0.2, 0.2, 0.2, 0.2, 0.200000000000001]
$ ruby -v
ruby 1.9.2p180 (2011-02-18 revision 30909) [i686-linux]
$ irb
ruby-1.9.2-p180 :002 > 2.45 - 1.45
=> 1.0000000000000002
ruby-1.9.2-p180 :005 > (0…10).map {|x| (x+0.9) - (x+0.7)}
=> [0.20000000000000007, 0.19999999999999996, 0.19999999999999973,
0.19999999999999973, 0.20000000000000018, 0.20000000000000018,
0.20000000000000018, 0.20000000000000018, 0.20000000000000107,
0.20000000000000107]
ruby-1.9.2-p180 :006 > (0…10).map {|x| (x+0.9) - (x+0.7)}.uniq
=> [0.20000000000000007, 0.19999999999999996, 0.19999999999999973,
0.20000000000000018, 0.20000000000000107]