# RiemannZeta.frink

``` // Formula for calculating the Riemann Zeta function. // // This follows the very efficient algorithm set out by P. Borwein in  // "An Efficient Algorithm for the Riemann Zeta Function", Jan. 20, 1995. // // http://eprints.cecm.sfu.ca/archive/00000107/ // // This implements Algorithm 2 of the paper. // // As noted by Borwein, "These algorithms do not compete with the // Riemann-Siegel formula for computations concerning zeros on the critical // line (Im[s] = 1/2) where multiple low precision evaluations are required." // // This means that it'll work around the critical line, but there are known // faster algorithms if you just need low precision and only work around the // critical line. // // This is the prototype of the (not-yet-implemented) Riemann Zeta function // in Frink. // Calculate the value of the Riemann Zeta function at s // n is the approximate number of digits of accuracy. RiemannZeta[s, n=30] := {    rnn = RiemannD[n]        sum = 0    for k = 0 to n-1       sum = sum + (-1)^k (rnn@k - rnn@n)/(k+1)^s    return sum * (-1/(rnn@n * (1 - 2^(1-s)))) } // Calculate an array of values for d_0 ... d_n // n is the approximate number of digits of precision in the result. // This array should be stored and re-used across calculations. RiemannD[n] := {    ret = new array[n+1]    sum = 0    for i = 0 to n    {       sum = sum + ((n+i-1)! 4^i)/((n-i)! (2i)!)       ret@i = n * sum    }    return ret } ```

This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen was born 18443 days, 1 hours, 28 minutes ago.