digitalmars.D.bugs - [Issue 10024] New: product function
- d-bugmail puremagic.com (47/47) May 03 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10024
http://d.puremagic.com/issues/show_bug.cgi?id=10024
           Summary: product function
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: enhancement
          Priority: P2
         Component: Phobos
        AssignedTo: nobody puremagic.com
        ReportedBy: bearophile_hugs eml.cc
I suggest to add a product() function to Phobos, similar to sum().
This benchnarking code shows an algorithm better than the naive one when it's
used on bigints:
import std.stdio, std.bigint, std.algorithm, std.random;
T product1(T)(T[] seq) {
    typeof(return) result = 1;
    foreach (s; seq)
        result *= s;
    return result;
}
T product2(T)(T[] seq) { // faster
    if (seq.length < 50) {
        typeof(return) result = 1;
        foreach (s; seq)
            result *= s;
        return result;
    } else {
        immutable mid = seq.length / 2;
        return product2(seq[0 .. mid]) * product2(seq[mid .. $]);
    }
}
void main() {
    BigInt[2 ^^ 16] items;
    foreach (i, ref b; items)
        b = i + 1;
    items[].randomShuffle;
    //auto r = items.product1;
    auto r = items.product2;
    //r.writeln;
}
What about T == InputRange?
-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
 May 03 2013








 
  
  
  d-bugmail puremagic.com
 d-bugmail puremagic.com