]> www.ginac.de Git - cln.git/blob - src/float/transcendental/cl_LF_ratseries.cc
23cdec60a79c9b67e9d86bba565dd60f01a57922
[cln.git] / src / float / transcendental / cl_LF_ratseries.cc
1 // eval_rational_series().
2
3 // General includes.
4 #include "cl_sysdep.h"
5
6 // Specification.
7 #include "cl_LF_tran.h"
8
9
10 // Implementation.
11
12 // Subroutine.
13 // Evaluates S = sum(N1 <= n < N2, a(n)/b(n) * (p(N1)...p(n))/(q(N1)...q(n)))
14 // and returns P = p(N1)...p(N2-1), Q = q(N1)...q(N2-1), B = B(N1)...B(N2-1)
15 // and T = B*Q*S (all integers). On entry N1 < N2.
16 // P will not be computed if a NULL pointer is passed.
17
18 const cl_LF eval_rational_series (uintL N, const cl_rational_series& args, uintC len)
19 {
20         if (args.pv)
21                 if (args.qv)
22                         if (args.bv)
23                                 if (args.av) {
24                                         var cl_pqab_series series =
25                                           { args.pv, args.qv, args.av, args.bv, args.qsv };
26                                         return eval_rational_series(N,series,len);
27                                 } else {
28                                         var cl_pqb_series series =
29                                           { args.pv, args.qv, args.bv, args.qsv };
30                                         return eval_rational_series(N,series,len);
31                                 }
32                         else
33                                 if (args.av) {
34                                         var cl_pqa_series series =
35                                           { args.pv, args.qv, args.av, args.qsv };
36                                         return eval_rational_series(N,series,len);
37                                 } else {
38                                         var cl_pq_series series =
39                                           { args.pv, args.qv, args.qsv };
40                                         return eval_rational_series(N,series,len);
41                                 }
42                 else
43                         if (args.bv)
44                                 if (args.av) {
45                                         var cl_pab_series series =
46                                           { args.pv, args.av, args.bv };
47                                         return eval_rational_series(N,series,len);
48                                 } else {
49                                         var cl_pb_series series =
50                                           { args.pv, args.bv };
51                                         return eval_rational_series(N,series,len);
52                                 }
53                         else
54                                 if (args.av) {
55                                         var cl_pa_series series =
56                                           { args.pv, args.av };
57                                         return eval_rational_series(N,series,len);
58                                 } else {
59                                         var cl_p_series series =
60                                           { args.pv };
61                                         return eval_rational_series(N,series,len);
62                                 }
63         else
64                 if (args.qv)
65                         if (args.bv)
66                                 if (args.av) {
67                                         var cl_qab_series series =
68                                           { args.qv, args.av, args.bv, args.qsv };
69                                         return eval_rational_series(N,series,len);
70                                 } else {
71                                         var cl_qb_series series =
72                                           { args.qv, args.bv, args.qsv };
73                                         return eval_rational_series(N,series,len);
74                                 }
75                         else
76                                 if (args.av) {
77                                         var cl_qa_series series =
78                                           { args.qv, args.av, args.qsv };
79                                         return eval_rational_series(N,series,len);
80                                 } else {
81                                         var cl_q_series series =
82                                           { args.qv, args.qsv };
83                                         return eval_rational_series(N,series,len);
84                                 }
85                 else
86                         if (args.bv)
87                                 if (args.av) {
88                                         var cl_ab_series series =
89                                           { args.av, args.bv };
90                                         return eval_rational_series(N,series,len);
91                                 } else {
92                                         var cl_b_series series =
93                                           { args.bv };
94                                         return eval_rational_series(N,series,len);
95                                 }
96                         else
97                                 if (args.av) {
98                                         var cl_a_series series =
99                                           { args.av };
100                                         return eval_rational_series(N,series,len);
101                                 } else {
102                                         var cl__series series =
103                                           { };
104                                         return eval_rational_series(N,series,len);
105                                 }
106 }
107 // Bit complexity (if p(n), q(n), a(n), b(n) have length O(log(n))):
108 // O(log(N)^2*M(N)).