Project

General

Profile

Actions

Bug #17731

closed

Integer downflow with inject/reduce

Added by gaojun (Jun Gao) about 3 years ago. Updated about 3 years ago.

Status:
Closed
Target version:
-
ruby -v:
ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-linux]
[ruby-core:102922]

Description

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]
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0