From: "nobu (Nobuyoshi Nakada)" Date: 2022-03-02T10:24:00+00:00 Subject: [ruby-core:107764] [Ruby master Bug#18604] [BUG] ERROR(VpDivd): space for remainder too small Issue #18604 has been updated by nobu (Nobuyoshi Nakada). Status changed from Open to Third Party's Issue Seems fixed by BigDecimal 3.1.2. ---------------------------------------- Bug #18604: [BUG] ERROR(VpDivd): space for remainder too small https://bugs.ruby-lang.org/issues/18604#change-96689 * 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/ Unsubscribe: