From: akr@... Date: 2016-03-25T15:05:14+00:00 Subject: [ruby-core:74573] [Ruby trunk Feature#12217] Introducing Enumerable#sum for precision compensated summation and revert r54237 Issue #12217 has been updated by Akira Tanaka. Akira Tanaka wrote: > - Enumerable#sum is not well defined for non-numeric elements, especially objects without + method. An idea to avoid this problem is an argument to specify the initial object. ``` module Enumerable def sum(init=0) inject(init, :+) # or better algorithm. end end ``` Programmers have responsibility that init has + method. However init has the default value 0 because #sum is mostly used for numeric. ---------------------------------------- Feature #12217: Introducing Enumerable#sum for precision compensated summation and revert r54237 https://bugs.ruby-lang.org/issues/12217#change-57702 * Author: Kenta Murata * Status: Assigned * Priority: Normal * Assignee: Yukihiro Matsumoto ---------------------------------------- In this issue I propose to introduce Enumerable#sum for precision compensated summation of an array of floating point numbers. In r54237, I've changed Enumerable#inject to support precision compensated summation for summing up floating point numbers. But I noticed that this commit broke the equality of `ary.inject(:+) == ary.inject {|a, x| a + x }`. I think this equality is important property of inject method, so I don't want to break it. And because precision compensated algorithms are complicated, I think they are provided in the standard library, especially simple summation. ---Files-------------------------------- inject-plus.txt (1.21 MB) -- https://bugs.ruby-lang.org/ Unsubscribe: