# TangentNumbers.frink

``` // Calculation of Tangent Numbers, which can be used to also calculate // Bernoulli numbers. // //  These can be used to derive the tangent of a number by: // //  tan[z] = sum[n>0, Tn * z^(2n-1)/(2n-1)!] // // See: //  http://arxiv.org/abs/1108.0286 (Brent) //  http://mathworld.wolfram.com/TangentNumber.html //  http://oeis.org/A000182 //  https://www.petervis.com/mathematics/maclaurin_series/maclaurin_series_tanx.html // //  See: //   Fast Algorithms for High-Precision Computation of Elementary Functions, //   Richard P. Brent, 2006 //   https://pdfs.semanticscholar.org/bf5a/ce09214f071251bfae3a09a91100e77d7ff6.pdf // // This implements the algorithm in figure 2 of the Brent paper. // //  The main problem for using this to calculate tangents to arbitrary // precision is that this algorithm alters numbers in-place in several passes, // and doesn't allow easy calculation of more tangent numbers if you decide // you need more. // //  Another problem with using Tangent Numbers around 90 degrees is that // this converges very slowly and may require way too many terms. // //  We could also try using Newton's method to invert arctan[x] which //  has a simple series expansion, //  arctan[x] = sum[(-1)^k x^(2k+1) / (2k + 1),  {k, 0, infinity}] //  but this only converges for abs[x] <= 1, x != +/- i //  tangentNumbers[n] := {    t = new array    t@1 = 1    for k = 2 to n       t@k = (k-1) t@(k-1)    for k = 2 to n       for j = k to n           t@j = (j-k) t@(j-1) + (j-k+2) t@j    return t  } ```

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 19092 days, 9 hours, 13 minutes ago.