Issue #15312 has been updated by oleynikov (Alexander Oleynikov).


This is not a bug, that's how floating point arithmetic works in accordance with the IEEE 754 standard.

You can read more about that on Wikipedia or in this article: https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

To get mathematically correct results you should be using [BigDecimal](https://ruby-doc.org/stdlib-2.5.3/libdoc/bigdecimal/rdoc/BigDecimal.html) or [Rational](https://ruby-doc.org/core-2.5.3/Rational.html).

```ruby
require 'bigdecimal'
BigDecimal('2.7') + BigDecimal('0.1') #=> 0.28e1
```

----------------------------------------
Bug #15312: Ruby gives me wrong result for plus operation
https://bugs.ruby-lang.org/issues/15312#change-74899

* Author: kot-begemot (Max Zet)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: 
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
Run into this weird issue today. Tried that on rubies 2.5.1p57 and ruby 2.5.3p105 (i believe this is latest stable at the moment).

Here is how to reproduce it

$ irb
2.5.3 :001 >  2.6 + 0.1
 => 2.7 
2.5.3 :002 >  2.7 + 0.1
 => 2.8000000000000003 
2.5.3 :003 >  2.8 + 0.1
 => 2.9


Here some more cases

$ irb
2.5.3 :001 > 2.7 + 0.01
 => 2.71 
2.5.3 :002 > 2.79 + 0.01
 => 2.8 
2.5.3 :003 >  2.8 - 0.1
 => 2.6999999999999997 
2.5.3 :004 > 2.79 + 0.01
 => 2.8 
2.5.3 :005 > 2.81 - 0.01
 => 2.8000000000000003 


Haven't discovered other cases yet, if will catch them, will post them here



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>