Merge branch 'rtoy-check-makeinfo-version'
[maxima.git] / tests / rtest_zeta.mac
blob53a094937d15c5eec94ac1947c905f3b24b8f837
1 (kill (all), 0);
2 0;
4 closeto(e,tol):=block([numer:true,abse],abse:abs(e),if(abse<tol) then true else abse);
5 closeto(e,tol):=block([numer:true,abse],abse:abs(e),if(abse<tol) then true else abse);
7 (zeta%pi : true, 0);
8 0$
10 (chk(x) := zeta(1-x) - 2 * cos(x * %pi /2) * gamma(x) * zeta(x) / (2 * %pi)^x, 0);
13 every(lambda([e], is(equal(e,0))), makelist(chk(k),k,2,21));
14 true$
16 every(lambda([e], is(equal(e,0))), makelist(zeta(-k) + bern(k+1)/(k+1),k,1,21));
17 true$
19 zeta(-1);
20 -1/12$
22 zeta(0);
23 -1/2$
25 zeta(0.0);
26 -0.5$
28 zeta(0.0b0);
29 -0.5b0$
31 errcatch(zeta(1)); /* zeta(1) is undefined */
32 [];
34 errcatch(zeta(1.0));
35 [];
37 errcatch(zeta(1.0b0));
38 [];
40 /* Check the limit */
41 limit(zeta(x),x,1,plus);
42 inf;
44 limit(zeta(x),x,1,minus);
45 minf;
47 limit(zeta(x),x,1);
48 infinity;
50 zeta(2);
51 %pi^2 /6$
53 zeta(4);
54 %pi^4 / 90$
56 zeta(6);
57 %pi^6 / 945$
59 zeta(8);
60 %pi^8/9450$
62 zeta(10);
63 %pi^10/93555$
65 /* bfloat(zeta(5)) should not return a rational! */
66 (fpprec:16, bfloat(zeta(5)));
67 1.03692775514337b0;
69 /* Fix bug #3672 */
70 closeto(abs(zeta(%i-2)-(0.02919559324346426-0.01778710697084208*%i)), 2e-17),numer;
71 true$
73 zeta(-2);
76 zeta(-2),numer;
77 0.0$
79 /* Fix bug #3673 */
80 closeto(abs(zeta(%i)-(0.003300223685324066-0.4181554491413215*%i)), 1.69e-16),numer;
81 true$
83 fpprec: 32;
84 32$
87  * The expected value was obtained from functions.wolfram.com using 40 digits of
88  * precision.
89  */
90 closeto(abs(zeta(3b0 + %i) - (1.1072144084314091956251002057752233976776b0 - 0.1482908671781753484907641256686246807941b0*%i)), 3.11b-33);
91 true$
94  * Bug 3968: For s < 0, zeta(-s) can be expressed in terms of
95  * zeta(1-s), a positive number.
96  *
97  * The expected answer is
98  *
99  * zeta(s) = 2^s*%pi^(s-1)*sin(%pi/2*s)*gamma(1-s)*zeta(1-s))
100  */
101 zeta(-1/2);
102 -zeta(3/2)/(4*%pi);
104 zeta(-7/3);
105 (7*gamma(1/3)*zeta(10/3))/(27*2^(4/3)*%pi^(10/3));
107 makelist(
108   block([
109     /* Experimentally determined.  Should be around 1e-15 or so */
110     threshold : 2.0e-15,
111     exact : zeta(-(k+1/2)),
112     fl : zeta(float(-(k+1/2))), err],
113     /*
114      *
115      * Use relative error.  If the error is too large, return the arg,
116      * the relative error, the exact value, and the corresponding
117      * numerical value
118      *
119      */
120     err : closeto(abs((float(exact)-fl)/fl), threshold),
121     if (err = true)
122     then true
123     else [-(k + 1/2), err, exact, fl]),
124   k, 1, 10);
125 [true, true, true, true, true, true, true, true, true, true];
127 (reset(fpprec), remfunction(chk),0);