From: marcandre-ruby-core@... Date: 2021-03-19T04:40:58+00:00 Subject: [ruby-core:102928] [Ruby master Bug#17731] Integer downflow with inject/reduce Issue #17731 has been updated by marcandre (Marc-Andre Lafortune). akr (Akira Tanaka) wrote in #note-5: > nobu changed it from LONG2NUM to ULONG2NUM at > https://github.com/ruby/ruby/commit/6bb70c11b344dee0739c6fb7bbf0ea124b5225b6 Thanks. The other changes were for counts (always positive) and most were considered as integers. In the `inject` case, the values can be any fixnum, including negative ones, so that change was a bug. Now fixed. ---------------------------------------- Bug #17731: Integer downflow with inject/reduce https://bugs.ruby-lang.org/issues/17731#change-90993 * Author: gaojun (Jun Gao) * Status: Closed * Priority: Normal * Assignee: marcandre (Marc-Andre Lafortune) * ruby -v: ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-linux] * Backport: 2.5: REQUIRED, 2.6: REQUIRED, 2.7: REQUIRED, 3.0: REQUIRED ---------------------------------------- Test case: [-2305843009213693953,-2305843009213693953,-2305843009213693953].inject(:+) or ([-2**61-1] * 3).inject(:+) Expected Result: -6917529027641081859 Actual Result: 11529215046068469757 Some clues: * Downflow seems not happen if there are only two elements in Array * The sample above works fine in https://try.ruby-lang.org/ * [-2305843009213693953,-2305843009213693953,-2305843009213693953].sum can get the correct result * ([-2**61] * 3).inject(:+) can get the correct result Affected Versions: * ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-linux] * ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-linux] * ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-linux] -- https://bugs.ruby-lang.org/ Unsubscribe: