[ruby-core:112884] [Ruby master Bug#18604] [BUG] ERROR(VpDivd): space for remainder too small
From:
"hsbt (Hiroshi SHIBATA) via ruby-core" <ruby-core@...>
Date:
2023-03-14 22:17:23 UTC
List:
ruby-core #112884
Issue #18604 has been updated by hsbt (Hiroshi SHIBATA).
Use [bigdecimal-3.1.2](https://github.com/ruby/bigdecimal/releases/tag/v3.1.2) or later.
----------------------------------------
Bug #18604: [BUG] ERROR(VpDivd): space for remainder too small
https://bugs.ruby-lang.org/issues/18604#change-102400
* Author: mentalizer (Jakob Skjerning)
* Status: Third Party's Issue
* Priority: Normal
* ruby -v: ruby 3.1.1p18 (2022-02-18 revision 53f5fc4236) [arm64-darwin21]
* Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN
----------------------------------------
After upgrading to Ruby 3.1 one of our statistical dashboards started crashing with a message saying
[BUG] ERROR(VpDivd): space for remainder too small
### How to reproduce
This can be reproduced in irb (reproduction script is attached containing the below code):
``` ruby
$ irb
3.1.1 :001 > require "bigdecimal"
=> true
3.1.1 :002 > 1.0 / BigDecimal("0.9652409267836026803310997240835632636973e2")
```
### Actual result
```ruby
(irb):2: [BUG] ERROR(VpDivd): space for remainder too small.
ruby 3.1.1p18 (2022-02-18 revision 53f5fc4236) [arm64-darwin21]
-- Crash Report log information --------------------------------------------
...
```
Full output from running reproduction script has been attached.
### Expected results
The result of division, which is roughly:
```
=> 0.10360107743589181177761764314914637186293143963577706371029263e-1
```
### Affected Rubies
So far I've been able to reproduce this on...
- ruby 3.1.1p18 (2022-02-18 revision 53f5fc4236) [arm64-darwin21]
- ruby 3.1.1p18 (2022-02-18 revision 53f5fc4236) [x86_64-linux]
- ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) [arm64-darwin21]
The following seem to work just fine:
- ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [arm64-darwin21]
### Notes
Admittedly, the precision here is way higher that we actually need it to be, and our workaround has been to simply convert the BigDecimal to Float before dividing.
```ruby
1.0 / BigDecimal("0.9652409267836026803310997240835632636973e2").to_f
# => 0.010360107743589182
```
---Files--------------------------------
repro.rb (86 Bytes)
ruby-2022-02-24-161721.ips (96 KB)
crash.log (469 KB)
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/