ch-ch-update: series, closed-form series, and strides

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Sat Jan 31 06:23:25 PST 2009


Ary Borenszweig wrote:
> Andrei Alexandrescu escribió:
>> I've updated my code and documentation to include series (as in math) 
>> in the form of infinite ranges. Also series in closed form (given n 
>> can compute the nth value without iterating) are supported as 
>> random-access ranges.
>>
>> Also Stride is provided. The Matrix container (speaking of scientific 
>> computing with D!) will support various representational choices, most 
>> importantly the ones endorsed by high-performance libraries. For 
>> Matrix, Stride is an important component as I'm sure anyone who's ever 
>> written a matrix knows.
>>
>> http://ssli.ee.washington.edu/~aalexand/d/web/phobos/std_range.html
>> http://ssli.ee.washington.edu/~aalexand/d/web/phobos/std_algorithm.html
>>
>> Back to series. Finally my dream has come true: I can define a decent 
>> Fibonacci series clearly and efficiently in one line of code. No more 
>> idiotic recursive function that takes exponential time to finish!
>>
>> auto fib = series!("a[n-1] + a[n]")(1, 1);
>> // write 10 Fibonacci numbers
>> foreach (e; take(10, fib)) writeln(e);
> 
> That is *SO* awesome!!

Thanks! Constant-space factorial is just a line away:

auto fact = series!("a[n] * (n + 1)")(1);
foreach (e; take(10, fact)) writeln(e);

writes:

1
1
2
6
24
120
720
5040
40320
362880

And this lousy series approximating pi:

auto piapprox = series!("a[n] + (n & 1 ? 4. : -4.) / (2 * n + 3)")(4.);
foreach (e; take(200, piapprox)) writeln(e);

Very slowly convergent. :o)


Andrei



More information about the Digitalmars-d mailing list