[ruby-core:68108] [Ruby trunk - Bug #10850] [Open] BigDecimal division incorrect

1 view
Skip to first unread message

Elyas....@gmail.com

unread,
Feb 13, 2015, 6:14:26 AM2/13/15
to ruby...@ruby-lang.org
Issue #10850 has been reported by Elyasin Shaladi.

----------------------------------------
Bug #10850: BigDecimal division incorrect
https://bugs.ruby-lang.org/issues/10850

* Author: Elyasin Shaladi
* Status: Open
* Priority: High
* Assignee: ruby-core
* ruby -v: ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-linux]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN
----------------------------------------
I tried this in Ruby 2.1.4, 2.1.5 and 2.2.0, but in none of the versions it seems correct to me.

irb(main):041:0* amount1 = BigDecimal("241.3")
=> #<BigDecimal:7f49bcb03558,'0.2413E3',18(18)>

irb(main):042:0> amount2 = BigDecimal("1800")
=> #<BigDecimal:7f49bcaf3400,'0.18E4',9(18)>

irb(main):043:0> rate = amount1 / amount2
=> #<BigDecimal:7f49bcae8398,'0.1340555555 5555555555 5555556E0',27(45)>

irb(main):044:0> rate * amount2 #should return amount1 = 241.3 in BigDecimal, but it does not
=> #<BigDecimal:7f49bcad6a30,'0.2413000000 0000000000 00000008E3',36(45)>


My guess is that there is a bug in the BigDecimal implementation.



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

sh...@ruby-lang.org

unread,
Feb 16, 2015, 10:05:41 PM2/16/15
to ruby...@ruby-lang.org
Issue #10850 has been updated by Shugo Maeda.

Priority changed from High to Normal

Elyasin Shaladi wrote:
> I tried this in Ruby 2.1.4, 2.1.5 and 2.2.0, but in none of the versions it seems correct to me.
>
> irb(main):041:0* amount1 = BigDecimal("241.3")
> => #<BigDecimal:7f49bcb03558,'0.2413E3',18(18)>
>
> irb(main):042:0> amount2 = BigDecimal("1800")
> => #<BigDecimal:7f49bcaf3400,'0.18E4',9(18)>
>
> irb(main):043:0> rate = amount1 / amount2
> => #<BigDecimal:7f49bcae8398,'0.1340555555 5555555555 5555556E0',27(45)>
>
> irb(main):044:0> rate * amount2 #should return amount1 = 241.3 in BigDecimal, but it does not
> => #<BigDecimal:7f49bcad6a30,'0.2413000000 0000000000 00000008E3',36(45)>
>
>
> My guess is that there is a bug in the BigDecimal implementation.

The result of 241.3 / 1800 is a recurring decimal 0.1340555555.....,
which can't be represented exactly by a BigDecimal.
Please use Rational if you need an exact representation of 241.3 / 1800.


----------------------------------------
Bug #10850: BigDecimal division incorrect
https://bugs.ruby-lang.org/issues/10850#change-51519

* Author: Elyasin Shaladi
* Status: Open
* Priority: Normal
Reply all
Reply to author
Forward
0 new messages