1 // eval_rational_series().
7 #include "cl_LF_tran.h"
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.
18 const cl_LF eval_rational_series (uintL N, const cl_rational_series& args, uintC len)
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);
28 var cl_pqb_series series =
29 { args.pv, args.qv, args.bv, args.qsv };
30 return eval_rational_series(N,series,len);
34 var cl_pqa_series series =
35 { args.pv, args.qv, args.av, args.qsv };
36 return eval_rational_series(N,series,len);
38 var cl_pq_series series =
39 { args.pv, args.qv, args.qsv };
40 return eval_rational_series(N,series,len);
45 var cl_pab_series series =
46 { args.pv, args.av, args.bv };
47 return eval_rational_series(N,series,len);
49 var cl_pb_series series =
51 return eval_rational_series(N,series,len);
55 var cl_pa_series series =
57 return eval_rational_series(N,series,len);
59 var cl_p_series series =
61 return eval_rational_series(N,series,len);
67 var cl_qab_series series =
68 { args.qv, args.av, args.bv, args.qsv };
69 return eval_rational_series(N,series,len);
71 var cl_qb_series series =
72 { args.qv, args.bv, args.qsv };
73 return eval_rational_series(N,series,len);
77 var cl_qa_series series =
78 { args.qv, args.av, args.qsv };
79 return eval_rational_series(N,series,len);
81 var cl_q_series series =
82 { args.qv, args.qsv };
83 return eval_rational_series(N,series,len);
88 var cl_ab_series series =
90 return eval_rational_series(N,series,len);
92 var cl_b_series series =
94 return eval_rational_series(N,series,len);
98 var cl_a_series series =
100 return eval_rational_series(N,series,len);
102 var cl__series series =
104 return eval_rational_series(N,series,len);
107 // Bit complexity (if p(n), q(n), a(n), b(n) have length O(log(n))):