- var uintC actuallen = len+2; // 2 Schutz-Digits
- var uintL sx = (uintL)(0.25*0.693148*intDsize*actuallen)+1;
- var uintL N = (uintL)(3.591121477*sx);
- var cl_I x = square((cl_I)sx);
- CL_ALLOCA_STACK;
- var cl_pqd_series_term* args = (cl_pqd_series_term*) cl_alloca(N*sizeof(cl_pqd_series_term));
- var uintL n;
- for (n = 0; n < N; n++) {
- init1(cl_I, args[n].p) (x);
- init1(cl_I, args[n].q) (square((cl_I)(n+1)));
- init1(cl_I, args[n].d) (n+1);
- }
- var cl_pqd_series_result sums;
- eval_pqd_series_aux(N,args,sums);
+ var uintC actuallen = len+2; // 2 guard digits
+ var uintC sx = (uintC)(0.25*0.693148*intDsize*actuallen)+1;
+ var uintC N = (uintC)(3.591121477*sx);
+ var cl_I x = square(cl_I(sx));
+ struct rational_series_stream : cl_pqd_series_stream {
+ uintC n;
+ cl_I x;
+ static cl_pqd_series_term computenext (cl_pqd_series_stream& thisss)
+ {
+ var rational_series_stream& thiss = (rational_series_stream&)thisss;
+ var uintC n = thiss.n;
+ var cl_pqd_series_term result;
+ result.p = thiss.x;
+ result.q = square(cl_I(n+1));
+ result.d = n+1;
+ thiss.n = n+1;
+ return result;
+ }
+ rational_series_stream (uintC n_, const cl_I& x_)
+ : cl_pqd_series_stream (rational_series_stream::computenext),
+ n (n_), x (x_) {}
+ } series(0,x);
+ var cl_pqd_series_result<cl_R> sums;
+ eval_pqd_series_aux(N,series,sums,actuallen);