C ALGORITHM 816, COLLECTED ALGORITHMS FROM ACM. C THIS WORK PUBLISHED IN TRANSACTIONS ON MATHEMATICAL SOFTWARE, C VOL. 28,NO. 1, March, 2002, P. 75--100. #! /bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #! /bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create the files: # C++/ # C++/Dp/ # C++/Dp/Drivers/ # C++/Dp/Drivers/r2d2lri_sample.cpp # C++/Dp/Drivers/res # C++/Dp/Src/ # C++/Dp/Src/r2d2lri.cpp # C++/Dp/Src/r2d2lri.h # Doc/ # Doc/Readme.txt # This archive created: Wed Jun 19 10:36:36 2002 export PATH; PATH=/bin:$PATH if test ! -d 'C++' then mkdir 'C++' fi cd 'C++' if test ! -d 'Dp' then mkdir 'Dp' fi cd 'Dp' if test ! -d 'Drivers' then mkdir 'Drivers' fi cd 'Drivers' if test -f 'r2d2lri_sample.cpp' then echo shar: will not over-write existing file "'r2d2lri_sample.cpp'" else cat << "SHAR_EOF" > 'r2d2lri_sample.cpp' //***************************************************************************** // r2d2lri_sample.cpp // Sample program demonstrating use of the DoubleIntegral class. // // Written by Ian Robinson and Michael Hill. // Last updated 23 April, 2001. // // This program demonstrates use of various forms of the "evaluate" function // and other public functions provided by the DoubleIntegral class to evaluate // integrals 1, 21 and 30 from the Robinson and De Doncker testbed to various // accuracies. Refer to the README.txt file for comments on the set-up of this // program. // // To run the program, ensure that the files r2d2lri.h and r2d2lri.cpp (or // their corresponding object files) are in the same directory as this file. // Then compile r2d2lri_sample.cpp and run the resulting executable file. // // Output from the program is directed to a file called r2d2lri_sample.out. // //***************************************************************************** #include "r2d2lri.h" #include #include // Definitions of Integrals 1, 21 and 30 from the RD testbed. // Integral 1. const double a1 = 0.0; const double b1 = 1.0; double g1(double x) {return 0.0;} double h1(double x) {return x*x;} double f1(double x, double y) {return x*exp(y);} const double exact1 = exp(1.0)/2.0 - 1.0; // Integral 21. const double a21 = 0.0; const double b21 = 2.0; double g21(double x) {return 0.0;} double h21(double x) { const double TWO_THIRDS = 2.0/3.0; double z = 1.0 - pow((x/2.0),1.5); return z <= 0.0 ? 0.0 : 3.0*pow(z,TWO_THIRDS); }; double f21(double x, double y) { double z = x*y; return z == 0.0 ? 0.0 : pow(z,-0.1); }; const double exact21 = 4.486951668283621; // Integral 30. const double a30 = -INFINITY; const double b30 = 0.0; double g30(double x) {return 0.0;} double h30(double x) {return INFINITY;} double f30(double x, double y) { double z1 = y - x + 1.0; z1 = z1*z1; if (z1 == 0.0) return 0.0; double z2 = -x*y; return z2 <= 0.0 ? 0.0 : 1.0/(z1 * sqrt(z2)); } const double exact30 = 4.0*atan(1.0); int main() { ofstream out; out.open("r2d2lri_sample.out"); out << setiosflags(ios::scientific); out << "OUTPUT FILE FOR r2d2lri_sample.cpp" << endl << endl; // First, evaluate I30 to 2, 4 and 6 significant figures. out << "COMPUTATION OF I30 TO 2, 4, 6 AND 10 FIGURES USING r2d2lri" << endl << endl; out << " 0 oo dy dx " << endl << " I30 = I I ------------------- . " << endl << " -oo 0 sqrt(-xy).(y-x+1)^2 " << endl << endl; DoubleIntegral I(a30,b30,g30,h30,f30); out << "Requested accuracy = 2 significant figures" << endl; out << setprecision(14) << "The computed value of I30 is " << I.evaluate(0.5E-2) << endl; out << setprecision(1) << "The estimated relative error is " << I.rel_err_est() << endl; out << "The actual relative error is " << fabs(I.value() - exact30)/exact30 << endl; out << "The error flag has been set to " << I.error_flag() << endl; out << "The number of function evaluations used was " << I.evals() << endl << endl; out << "Requested accuracy = 4 significant figures" << endl; out << setprecision(14) << "The computed value of I30 is " << I.evaluate(0.5E-4) << endl; out << setprecision(1) << "The estimated relative error is " << I.rel_err_est() << endl; out << "The actual relative error is " << fabs(I.value() - exact30)/exact30 << endl; out << "The error flag has been set to " << I.error_flag() << endl; out << "The number of function evaluations was " << I.evals() << endl << endl; out << "Requested accuracy = 6 significant figures" << endl; out << setprecision(14) << "The computed value of I30 is " << I.evaluate(0.5E-6) << endl; out << setprecision(1) << "The estimated relative error is " << I.rel_err_est() << endl; out << "The actual relative error is " << fabs(I.value() - exact30)/exact30 << endl; out << "The error flag has been set to " << I.error_flag() << endl; out << "The number of function evaluations was " << I.evals() << endl << endl; // Now try to evaluate I30 to 10 significant figures. (The algorithm is // unable to achieve this accuracy and sets the error flag accordingly.) out << "Requested accuracy = 10 significant figures" << endl; out << setprecision(14) << "The computed value of I30 is " << I.evaluate(0.5E-10) << endl; out << setprecision(1) << "The estimated relative error is " << I.rel_err_est() << endl; out << "The actual relative error is " << fabs(I.value() - exact30)/exact30 << endl; out << "The error flag has been set to " << I.error_flag() << endl; out << "The number of function evaluations was " << I.evals() << endl << endl; // Now, evaluate I1 to 12 significant figures. DoubleIntegral I1; double value, error; int flag; out << endl << "COMPUTATION OF I1 TO 12 FIGURES" << endl << endl; out << " 1 x^2 " << endl << " I1 = I I x.exp(y) dy dx " << endl << " 0 0 " << endl << endl; value = I1.evaluate(a1,b1,g1,h1,f1,error,flag,0.5E-12); out << "Requested accuracy = 12 significant figures" << endl; out << setprecision(14) << "The computed value of I1 is " << value << endl; out << setprecision(1) << "The estimated relative error is " << error << endl; out << "The actual relative error is " << fabs(value - exact1)/exact1 << endl; out << "The error flag has been set to " << flag << endl; out << "The number of function evaluations was " << I1.evals() << endl << endl; // Finally, evaluate each of the three integrals to 7 significant figures. out << endl << "COMPUTATION OF I30, I21 AND I1 TO 7 FIGURES" << endl << endl; out << " 2 h(x) " << endl << " I21 = I I (xy)^(-0.1) dy dx " << endl << " 0 0 " << endl << endl << " where " << endl << " h(x) = 3(1 - (x/2)^1.5)^(2/3) " << endl << endl; I.set_rel_tol(0.5E-7); out << "Requested accuracy = 7 significant figures" << endl; out << setprecision(14) << "The computed value of I30 is " << I.evaluate() << endl; out << setprecision(1) << "The estimated relative error is " << I.rel_err_est() << endl; out << "The actual relative error is " << fabs(I.value() - exact30)/exact30 << endl; out << "The error flag has been set to " << I.error_flag() << endl; out << "The number of function evaluations was " << I.evals() << endl << endl; I.set_new_integral(a21,b21,g21,h21,f21); out << "Requested accuracy = 7 significant figures" << endl; out << setprecision(14) << "The computed value of I21 is " << I.evaluate() << endl; out << setprecision(1) << "The estimated relative error is " << I.rel_err_est() << endl; out << "The actual relative error is " << fabs(I.value() - exact21)/exact21 << endl; out << "The error flag has been set to " << I.error_flag() << endl; out << "The number of function evaluations was " << I.evals() << endl << endl; I = I1; out << "Requested accuracy = 7 significant figures" << endl; out << setprecision(14) << "The computed value of I1 is " << I.evaluate() << endl; out << setprecision(1) << "The estimated relative error is " << I.rel_err_est() << endl; out << "The actual relative error is " << fabs(I.value() - exact1)/exact1 << endl; out << "The error flag has been set to " << I.error_flag() << endl; out << "The number of function evaluations was " << I.evals() << endl; return 0; } SHAR_EOF fi # end of overwriting check if test -f 'res' then echo shar: will not over-write existing file "'res'" else cat << "SHAR_EOF" > 'res' OUTPUT FILE FOR r2d2lri_sample.cpp COMPUTATION OF I30 TO 2, 4, 6 AND 10 FIGURES USING r2d2lri 0 oo dy dx I30 = I I ------------------- . -oo 0 sqrt(-xy).(y-x+1)^2 Requested accuracy = 2 significant figures The computed value of I30 is 3.14166407938085e+00 The estimated relative error is 6.4e-04 The actual relative error is 2.3e-05 The error flag has been set to 0 The number of function evaluations used was 265 Requested accuracy = 4 significant figures The computed value of I30 is 3.14159290684911e+00 The estimated relative error is 1.5e-05 The actual relative error is 8.1e-08 The error flag has been set to 0 The number of function evaluations was 709 Requested accuracy = 6 significant figures The computed value of I30 is 3.14159259152384e+00 The estimated relative error is 1.3e-07 The actual relative error is 2.0e-08 The error flag has been set to 0 The number of function evaluations was 2841 Requested accuracy = 10 significant figures The computed value of I30 is 3.14159258961594e+00 The estimated relative error is 8.1e-10 The actual relative error is 2.0e-08 The error flag has been set to 1 The number of function evaluations was 28426 COMPUTATION OF I1 TO 12 FIGURES 1 x^2 I1 = I I x.exp(y) dy dx 0 0 Requested accuracy = 12 significant figures The computed value of I1 is 3.59140914229522e-01 The estimated relative error is 5.0e-15 The actual relative error is 2.8e-15 The error flag has been set to 0 The number of function evaluations was 1417 COMPUTATION OF I30, I21 AND I1 TO 7 FIGURES 2 h(x) I21 = I I (xy)^(-0.1) dy dx 0 0 where h(x) = 3(1 - (x/2)^1.5)^(2/3) Requested accuracy = 7 significant figures The computed value of I30 is 3.14159258960700e+00 The estimated relative error is 1.5e-09 The actual relative error is 2.0e-08 The error flag has been set to 0 The number of function evaluations was 11377 Requested accuracy = 7 significant figures The computed value of I21 is 4.48695166827207e+00 The estimated relative error is 1.4e-08 The actual relative error is 2.6e-12 The error flag has been set to 0 The number of function evaluations was 1063 Requested accuracy = 7 significant figures The computed value of I1 is 3.59140914229522e-01 The estimated relative error is 5.0e-15 The actual relative error is 2.8e-15 The error flag has been set to 0 The number of function evaluations was 1417 SHAR_EOF fi # end of overwriting check cd .. if test ! -d 'Src' then mkdir 'Src' fi cd 'Src' if test -f 'r2d2lri.cpp' then echo shar: will not over-write existing file "'r2d2lri.cpp'" else cat << "SHAR_EOF" > 'r2d2lri.cpp' //**************************************************************************** // r2d2lri.cpp // Implementation file for the DoubleIntegral class. // // Code written by Ian Robinson and Michael Hill. // Last updated: 23 April 2001 // // Refer to the header file r2d2lri.h and to the files r2d2lri_sample.cpp and // README.txt for comments on, and examples of, the use of this class. // //**************************************************************************** #include "r2d2lri.h" // CONSTRUCTORS //**************************************************************************** DoubleIntegral::DoubleIntegral(double req_rel_acc, double req_abs_acc, unsigned max_evals) // Default values for all three of the parameters are provided in the prototype // for this constructor. { rel_tol = req_rel_acc; abs_tol = req_abs_acc; max_points = min(max_evals, DEFAULT_MAX_POINTS); xdir = NOT_CHECKED; ydir = NOT_CHECKED; max_iters = DEFAULT_C_SIZE - 1; c = new double [DEFAULT_C_SIZE]; c[0] = 0.0; e = new double [DEFAULT_C_SIZE-7]; } //**************************************************************************** DoubleIntegral::DoubleIntegral(double A, double B, BOUNDARY_FUNCTION G, BOUNDARY_FUNCTION H, INTEGRAND_FUNCTION F, double req_rel_acc, double req_abs_acc, unsigned max_evals) // The prototype for this constructor provides default values for the last // three parameters, req_rel_acc, req_abs_acc and max_evals. { a = A; b = B; g = G; h = H; f = F; rel_tol = req_rel_acc; abs_tol = req_abs_acc; max_points = min(max_evals,DEFAULT_MAX_POINTS); set_region_type(); set_initial_values(); max_iters = DEFAULT_C_SIZE - 1; c = new double [DEFAULT_C_SIZE]; c[0] = 0.0; e = new double [DEFAULT_C_SIZE-7]; } // COPY CONSTRUCTOR //**************************************************************************** DoubleIntegral::DoubleIntegral(const DoubleIntegral& I) // Copies the contents of all private data members of I into the corresponding // private data members of the new object. { unsigned i; a = I.a; b = I.b; g = I.g; h = I.h; f = I.f; rel_tol = I.rel_tol; abs_tol = I.abs_tol; max_points = I.max_points; xdir = I.xdir; ydir = I.ydir; x_transform = I.x_transform; y_transform = I.y_transform; cubature = I.cubature; err_est = I.err_est; fun_vals = I.fun_vals; ifail = I.ifail; max_iters = I.max_iters; c = new double [max_iters + 1]; for (i = 0; i < max_iters; i++) c[i] = I.c[i]; e = new double [max_iters - 6]; for (i = 0; i < max_iters - 7; i++) e[i] = I.e[i]; } // DESTRUCTOR //**************************************************************************** DoubleIntegral::~DoubleIntegral() { delete [] c; delete [] e; } // ASSIGNMENT OPERATOR //**************************************************************************** void DoubleIntegral::operator =(const DoubleIntegral &I) { unsigned i; double *temp; a = I.a; b = I.b; g = I.g; h = I.h; f = I.f; rel_tol = I.rel_tol; abs_tol = I.abs_tol; max_points = I.max_points; xdir = I.xdir; ydir = I.ydir; x_transform = I.x_transform; y_transform = I.y_transform; cubature = I.cubature; err_est = I.err_est; fun_vals = I.fun_vals; ifail = I.ifail; if (max_iters != I.max_iters) { temp = new double [I.max_iters + 1]; delete [] c; c = temp; temp = new double [I.max_iters - 6]; delete [] e; e = temp; max_iters = I.max_iters; } for (i = 0; i < max_iters; i++) c[i] = I.c[i]; for (i = 0; i < max_iters - 7; i++) e[i] = I.e[i]; } // MODIFICATION MEMBER FUNCTIONS // The calls to the procedure set_initial_values() in these modification // functions may appear to be redundant since this initializing procedure is // called again when the new integral thus created is evaluated. However, // the values of the cubature, the error estimate and the number of function // values have been re-initialized as soon as any aspect of the integral is // changed so that any possible misinterpretation or misuse of the residual // values of these variables is avoided. //**************************************************************************** void DoubleIntegral::set_outer_interval(double A, double B) { a = A; b = B; xdir = set_interval_type(infinite(a), infinite(b)); x_transform = set_transform_type(xdir); set_initial_values(); } //**************************************************************************** void DoubleIntegral::set_inner_interval(BOUNDARY_FUNCTION G, BOUNDARY_FUNCTION H) { g = G; h = H; ydir = set_interval_type(infinite((*g)(a)), infinite((*h)(a))); y_transform = set_transform_type(ydir); set_initial_values(); } //**************************************************************************** void DoubleIntegral::set_integrand(INTEGRAND_FUNCTION F) { f = F; set_initial_values(); } //**************************************************************************** void DoubleIntegral::set_rel_tol(double req_rel_acc) { rel_tol = req_rel_acc; set_initial_values(); } //**************************************************************************** void DoubleIntegral::set_abs_tol(double req_abs_acc) { abs_tol = req_abs_acc; set_initial_values(); } //**************************************************************************** void DoubleIntegral::set_max_evals(unsigned max_evals) { max_points = max_evals; set_initial_values(); } //**************************************************************************** void DoubleIntegral::set_new_integral(double A, double B, BOUNDARY_FUNCTION G, BOUNDARY_FUNCTION H, INTEGRAND_FUNCTION F) // Note: rel_tol, abs_tol and max_points remain unchanged. { a = A; b = B; g = G; h = H; f = F; set_region_type(); set_initial_values(); } // ACCESS FUNCTIONS //**************************************************************************** void DoubleIntegral::get_outer_interval(double& A, double& B) const { A = a; B = b; } //**************************************************************************** void DoubleIntegral::get_inner_interval(BOUNDARY_FUNCTION& G, BOUNDARY_FUNCTION& H) const { G = g; H = h; } //**************************************************************************** void DoubleIntegral::get_integrand(INTEGRAND_FUNCTION& F) const { F = f; } //**************************************************************************** double DoubleIntegral::get_rel_tol() const { return rel_tol; } //**************************************************************************** double DoubleIntegral::get_abs_tol() const { return abs_tol; } //**************************************************************************** unsigned DoubleIntegral::get_max_evals() const { return max_points; } //**************************************************************************** double DoubleIntegral::value() const { return cubature; } //**************************************************************************** double DoubleIntegral::rel_err_est() const { return err_est; } //**************************************************************************** double DoubleIntegral::abs_err_est() const { if (err_est == -1.0) return -1.0; return cubature == 0.0 ? err_est : err_est*fabs(cubature); } //**************************************************************************** int DoubleIntegral::evals() const { return fun_vals; } //**************************************************************************** int DoubleIntegral::error_flag() const { return ifail; } // INTEGRAL EVALUATION FUNCTIONS //**************************************************************************** double DoubleIntegral::evaluate() { integrate(); return cubature; } //**************************************************************************** double DoubleIntegral::evaluate(double req_rel_acc) { rel_tol = req_rel_acc; integrate(); return cubature; } //**************************************************************************** double DoubleIntegral::evaluate(double& rel_err_est, int& flag, int& evals) { integrate(); rel_err_est = err_est; flag = ifail; evals = fun_vals; return cubature; } //**************************************************************************** double DoubleIntegral::evaluate(double A, double B, BOUNDARY_FUNCTION G, BOUNDARY_FUNCTION H, INTEGRAND_FUNCTION F, double& rel_err_est, int& flag, double req_rel_acc, double req_abs_acc, unsigned max_evals) // The prototype for this function provides default values for the last three // parameters, req_rel_acc, req_abs_acc and max_evals. { a = A; b = B; g = G; h = H; f = F; rel_tol = req_rel_acc; abs_tol = req_abs_acc; max_points = max_evals; set_region_type(); integrate(); flag = ifail; rel_err_est = err_est; return cubature; } // PRIVATE MEMBER FUNCTIONS //**************************************************************************** void DoubleIntegral::set_region_type() // Characterizes the integration region as the product of two one-dimensional // intervals, each of which may be finite, semi-infinite or infinite, and sets // the appropriate transformation flags. { BOOL a_infinite = infinite(a); BOOL b_infinite = infinite(b); double r; // A "random" value if (a_infinite) if (b_infinite) r = 2.149783; // Must be (-INFINITY, INFINITY) else r = b + 6.451372; // Must be [b, INFINITY) else if (b_infinite) r = a - 6.451372; // Must be (-INFINITY, a] else r = (a + b)/2.130684; // Must be [a, b] xdir = set_interval_type(a_infinite, b_infinite); ydir = set_interval_type(infinite((*g)(r)), infinite((*h)(r))); x_transform = set_transform_type(xdir); y_transform = set_transform_type(ydir); } //**************************************************************************** INTERVAL DoubleIntegral::set_interval_type(BOOL lower_inf, BOOL upper_inf) const // Returns a description of a one-dimensional integration interval: // FINITE, UPPER_INFINITE ([a,infinity)), LOWER_INFINITE ((-infinity,b]) // or INFINITE((-infinity,infinity)). { if (lower_inf) if (upper_inf) return INFINITE; else return LOWER_INFINITE; else if (upper_inf) return UPPER_INFINITE; else return FINITE; } //**************************************************************************** TRANSFORM DoubleIntegral::set_transform_type(INTERVAL direction) const // Returns a value corresponding to the type of transformation to be applied // before attempting to evaluate the integral. { if (direction == NOT_CHECKED || direction == FINITE) return NONE; else return RATIONAL; } //**************************************************************************** void DoubleIntegral::set_initial_values() // Initializes cubature, err_est, fun_vals and ifail. { cubature = 0.0; err_est = -1.0; fun_vals = 0; ifail = -1; } //**************************************************************************** void DoubleIntegral::integrate() // Calls the core integration routine to evaluate cubature, err_est, ifail and // fun_vals. // If the integration region is the plane, a radial transformation is first // applied (subject to there being a likelihood of success with this trans- // formation). If a satisfactory result is not achieved, then the integral // is recomputed using a rational transformation in each direction. If a // satisfactory result is still not achieved, then a logarithm transformation // is applied in each direction. The best of the results obtained using one, // two or three of these transformations is accepted. // If the integration region is semi-infinite, a rational transformation is // first applied in the infinite direction(s). If a satisfactory result is not // achieved, then the integral is recomputed using a logarithm transformation in // the infinite direction(s), with the better of the two results being accepted. { int fun_vals1 = 0; double cubature1, err_est1 = HUGE_VAL; BOOL repeat; // First, check that the integration region has been characterized if (xdir == NOT_CHECKED || ydir == NOT_CHECKED) { cerr << "Integration region not fully specified. Integration aborted." << endl; exit(1); } radial_transform = FALSE; // If the integration region is the plane, ... if (xdir == INFINITE && ydir == INFINITE) { // ... compute the optimal radius value for the radial transform r = optimal_radius(*f); if (r <= 0.0 || r > 6.3) { // If the radial transform is unlikely to produce a good // result, then try the rational transform instead fun_vals1 = 36; } else { // Try the radial transform radial_transform = TRUE; twoPIr2 = TWO_PI*r*r; core(); fun_vals = 2*fun_vals + 36; if (ifail != 0) { //If it doesn't work, save values and try the rational transform fun_vals1 = fun_vals; cubature1 = cubature; err_est1 = err_est; radial_transform = FALSE; } } // If the radial transform was skipped or didn't work, ... if (!radial_transform) { // ... apply the rational transform core(); fun_vals += fun_vals1; if (ifail != 0) { // If it doesn't work, save values and try the logarithm transform if (err_est < err_est1) { cubature1 = cubature; err_est1 = err_est; } fun_vals1 = fun_vals; x_transform = LOGARITHM; y_transform = LOGARITHM; // Logarithm transform for integration over the plane core(); fun_vals += fun_vals1; if (ifail != 0) { // If it doesn't work, return the best result if (err_est > err_est1) { cubature = cubature1; err_est = err_est1; } } // Reset transform variables x_transform = RATIONAL; y_transform = RATIONAL; } } } else { // Straightforward evaluation for finite or semi-infinite region core(); // If not successful ... if (ifail != 0) { // ... check if region is semi-infinite, ... repeat = FALSE; if (x_transform == RATIONAL) { x_transform = LOGARITHM; repeat = TRUE; } if (y_transform == RATIONAL) { y_transform = LOGARITHM; repeat = TRUE; } // ... and, if so, save values and try the logarithm transform if (repeat) { cubature1 = cubature; err_est1 = err_est; fun_vals1 = fun_vals; core(); fun_vals += fun_vals1; // If it doesn't work, return the best result if (ifail != 0) { if (err_est > err_est1) { cubature = cubature1; err_est = err_est1; } } // Reset transform variables if (x_transform == LOGARITHM) x_transform = RATIONAL; if (y_transform == LOGARITHM) y_transform = RATIONAL; } } } } //**************************************************************************** double DoubleIntegral::optimal_radius(INTEGRAND_FUNCTION f) // Returns an appropriate value for the radius of the circle into which to map // the plane when using the radial transformation. If no appropriate value // can be determined, the value -1 is returned. // // The methodology is as implemented in the code associated with Cubpack++ // (R. Cools, D. Laurie and L. Pluym, "Algorithm 764: Cubpack++: A C++ Package // for Automatic Two-Dimensional Cubature", ACM Trans on Math Soft, Vol 23, // No. 1, March, 1997, pp. 1-15). { int i,k, // Loop and array indices index_start = 0; // Loop index double Ia, // Used to hold successive annulus cubatures Iabs[7], // For the absolute values of the annulus cubatures Iabs_sum = 0.0, // Sum of the absolute cubatures for the annuli Iabs_sum2, // Iabs_sum/2 Iabs_temp = 0.0, // Partial sums of Iabs[k] r; // Used in computation of the final optimal value // Calculating Iabs[k] for (k = 0; k < 7; k++) { Ia = 0.0; for (i = index_start; i < index_end[k]; i++) { Ia += (*f)(x_coord[i],y_coord[i]); }; Ia *= mod_CH_weight[k]; Iabs[k] = fabs(Ia); Iabs_sum += Iabs[k]; index_start = index_end[k]; }; Iabs_sum2 = Iabs_sum/2.0; // Finding r: the first step k = -1; while (Iabs_temp <= Iabs_sum2) { k++; r = radius[k]; Iabs_temp += Iabs[k]; }; // The second step: finding the bit "left over" r = p[k] + (Iabs_temp - Iabs_sum2)/Iabs[k]*q[k]; if (r > 0.0 && r < PI) { return sqrt(log(PI/r)); } else { return -1.0; }; } //**************************************************************************** void DoubleIntegral::core() // Evaluates cubature, err_est, ifail and fun_vals. { double l2, l4, s1, s2; BOOL convergence = FALSE, limit_reached = FALSE, roundoff = FALSE; int j = 1, // Index for the cubature array c n = 2, // Level of the displacement lattice m = SEED, // Number of points in the current cubature two_m = 2*m, four_m = 4*m; // Compute initial cubature using the seed lattice set_initial_values(); l4 = displaced_fibonacci(2,0,0); c[1] = l4/m; // Generate successive lattice rule approximations until convergence // is achieved or an abnormal condition is detected LATTICE lattice = L3; while (!convergence && !limit_reached && !roundoff) { switch (lattice) { case L3: // Generate L^3(2m) displaced lattice approximation s2 = generate_set(3,n); l2 = l4 + s2; c[++j] = l2/two_m; if (j > 2) set_termination_flags(j,limit_reached,convergence,roundoff); lattice = L1; break; case L1: // Generate L^1(2m) displaced lattice approximation s1 = generate_set(1,n); l2 = l4 + s1; c[++j] = l2/two_m; set_termination_flags(j,limit_reached,convergence,roundoff); lattice = L2; break; case L2: // Generate L^2(2m) and L(4m) approximations l2 = l4 + generate_set(2,n); c[++j] = l2/two_m; l4 = l2 + s1 + s2; c[++j] = l4/four_m; set_termination_flags(j,limit_reached,convergence,roundoff); lattice = L3; // Update m and n m = four_m; two_m = 2*m; four_m = 4*m; n = 2*n; } } // Set cubature, err_est, ifail and fun_vals if ((j == 3) && approx_178) cubature = c[2]; else cubature = c[j]; err_est = max(SAFETY,err_est); if (convergence) ifail = 0; else if (roundoff) ifail = 1; else if (limit_reached) ifail = 2; switch (lattice) { case L1: fun_vals += two_m; break; case L2: fun_vals += 3*m; break; case L3: fun_vals += m; } } //*************************************************************************** double DoubleIntegral::generate_set(int set, int n) // Allows generation of the x and y coordinates and corresponding weights for // the displacement lattices. n refers to the level of the Fibonacci lattice // displacement process; set specifies which of the three displacement lattices // L^1(2n), L^2(2n) or L^3(2n) is to be generated. { int p1, q1; double sum = 0.0; double s, t, u = 0.0; // Used in the compensated Kahan summation switch (set) { case 1: p1 = 0; // L^1(2n): Even, Odd q1 = 1; break; case 2: p1 = 1; // L^2(2n): Odd, Even q1 = 0; break; case 3: p1 = 1; // L^3(2n): Odd, Odd q1 = 1; } for (int p = p1; p < n; p = p + 2) for (int q = q1; q < n; q = q + 2) { // Compensated Kahan summation s = displaced_fibonacci(n,p,q) - u; t = sum + s; u = (t - sum) - s; sum = t; } return sum; } //**************************************************************************** double DoubleIntegral::displaced_fibonacci(int n, int p, int q) // Returns the weighted sum of function values to be used in the displaced // Fibonacci rule. Only simple integer arithmetic is necessary to generate // the references in the static arrays coordinate[] and weight[]. (Subsequent // division by the number of points in the lattice yields the cubature // approximation.) { int denom = n*SEED, nprev = n*PREV_FIB_NUMBER, xnum = p*SEED - n, ynum = q*SEED - nprev; int x_index, y_index; // Indices of coordinate[] and weight[] double x, y, w, w1, w2; // Values of coordinates and weights double sum = 0.0; // Weighted sum of function values returned int MULT = POINTS/denom; // Used in the calculation of x_index & y_index double rcx, rsx; // Used when for the radial transformation double s, t, u = 0.0; // Used in the compensated Kahan summations // Generate the displaced Fibonacci sum for (int counter = 0; counter < SEED; counter++) { // x and y are generated as for a rank 1 lattice rule xnum += n; x_index = (xnum % denom)*MULT; ynum += nprev; y_index = (ynum % denom)*MULT; w = weight[x_index] * weight[y_index]; // Apply transformations if (w != 0) { y = coordinate[y_index]; if (radial_transform) { if (y != 0.0) { rcx = r*cos2pix[x_index]; rsx = r*sin2pix[x_index]; // Compensated Kahan summation s = twoPIr2*w*(y*(*f)(y*rcx,y*rsx) + (*f)(rcx/y,rsx/y)/(y*y*y)) - u; t = sum + s; u = (t - sum) - s; sum = t; } else fun_vals--; } else { x = coordinate[x_index]; map_to_ab(x,w1); if (w1 != 0) { map_to_gh(x,y,w2); if (w2 != 0) { // Compensated Kahan summation s = w*w1*w2*(*f)(x,y) - u; t = sum + s; u = (t - sum) - s; sum = t; } else fun_vals--; } else fun_vals--; } } else fun_vals--; } return sum; } //**************************************************************************** void DoubleIntegral::map_to_ab(double& x, double& w) const // Transformation to [a,b] in the x direction. // Precondition: x in [0,1]. Post-condition: x in [a,b]. { double z, z1, z2; // Temporary variables switch (xdir) { case FINITE: w = b - a; x = a + w*x; break; case UPPER_INFINITE: if (x <= 0.0) w = 0.0; else { if (x_transform == RATIONAL) { z = 1.0/x; w = z/x; x = a + z - 1.0; } else // x_transform == LOGARITHM { if (x >= 1.0) w = 0.0; else { z = 1.0 - x; w = 1.0/z; x = a - log(z); } } } break; case LOWER_INFINITE: if (x <= 0.0) w = 0.0; else { if (x_transform == RATIONAL) { z = 1.0/x; w = z/x; x = b - z + 1.0; } else // x_transform == LOGARITHM { w = 1.0/x; x = b + log(x); } } break; case INFINITE: if (x <= 0.0 || x >= 1.0) w = 0.0; else { if (x_transform == RATIONAL) { z1 = 1.0/(1.0 - x); z2 = 1.0/x; w = z1*z1 + z2*z2; x = z1 - z2; } else // x_transform == LOGARITHM { z = 1.0/(1.0 - x); w = z/x; x = log(x*z); } } } } //**************************************************************************** void DoubleIntegral::map_to_gh(double x, double& y, double& w) const // Transformation to [g(x),h(x)] in the y direction. // Precondition: x in [a,b], y in [0,1]. // Post-condition: x in [a,b], y in [g(x),h(x)]. { double z, z1, z2; // Temporary variables switch (ydir) { case FINITE: z = (*g)(x); w = (*h)(x) - z; y = z + w*y; break; case UPPER_INFINITE: if (y <= 0.0) w = 0.0; else { if (y_transform == RATIONAL) { z = 1.0/y; w = z/y; y = (*g)(x) + z - 1.0; } else // y_transform == LOGARITHM { if (y >= 1.0) w = 0.0; else { z = 1.0 - y; w = 1.0/z; y = (*g)(x) - log(z); } } } break; case LOWER_INFINITE: if (y <= 0.0) w = 0.0; else { if (y_transform == RATIONAL) { z = 1.0/y; w = z/y; y = (*h)(x) - z + 1.0; } else // y_transform == LOGARITHM { w = 1.0/y; y = (*h)(x) + log(y); } } break; case INFINITE: if (y <= 0.0 || y >= 1.0) w = 0.0; else { if (y_transform == RATIONAL) { z1 = 1.0/(1.0 - y); z2 = 1.0/y; w = z1*z1 + z2*z2; y = z1 - z2; } else // y_transform == LOGARITHM { z = 1.0/(1.0 - y); w = z/y; y = log(y*z); } } } } //**************************************************************************** void DoubleIntegral::set_termination_flags(int j, BOOL& limit, BOOL& cnvrgnce, BOOL& round) // Sets err_est to the error estimate for the current approximation and // returns values for limit, cnvrgnce and round according to, respectively, // whether the maximum number of points has been reached, the current // approximation satisfies the accuracy requirement or rounding error has // been detected in the current approximation. { err_est = error_estimate(j); limit = j == max_iters; cnvrgnce = err_est <= max(rel_tol, abs_tol*fabs(c[j])); if (j > 12) round = diff(j-4,j-8) < 20.0*diff(j,j-4); } //**************************************************************************** double DoubleIntegral::error_estimate(int j) // Returns an estimate of the error in c[j] (the current approximation). { double d1,d2; switch(j) { case 3: // 267 points d1 = fabs(c[3] - c[1]); d2 = fabs(c[2] - c[1]); if (d1 > d2) { approx_178 = FALSE; return c[3]==0.0 ? 4.0*d1 : 4.0*d1/fabs(c[3]); } else { approx_178 = TRUE; return c[2]==0.0 ? 4.0*d2 : 4.0*d2/fabs(c[2]); } case 5: // 356 points e[1] = diff(5,1); conservative = (min_diff(5)!=0.0) && (e[1]/min_diff(5) < 60.0); if (conservative) e[4] = max(e[1],max_diff(5)); else e[4] = go_fer(e[1]); return e[4]; case 6: // 712 points e[2] = diff(6,2); if (conservative || (e[4] > e[2]/10.0)) return max(e[2],diff(6,5)); else return go_fer(e[2]); case 7: // 1068 points e[3] = diff(7,3); if (conservative || (e[4] > e[3]/10.0)) return max(e[3],diff(7,5),diff(7,6)); else return go_fer(e[3]); case 9: // 1424 points e[4] = diff(9,5); if (((e[4] <= e[1]*e[1]) && (e[4] <= 0.5E-3)) || (e[4] <= 1E-9)) e[7] = pow(e[4],1.4); else e[7] = max(e[4], max_diff(9)); return e[7]; case 10: // 2848 points e[2] = diff(6,2); e[5] = diff(10,6); if ((((e[5] <= e[2]*e[2]) && (e[5] <= 0.5E-3)) || (e[5] <= 1E-9)) && (e[7] <= e[5]/10.0)) return max(pow(e[5],1.4), diff(10,9)); else return max(e[5], diff(10,9)); case 11: // 4272 points e[3] = diff(7,3); e[6] = diff(11,7); if ((((e[6] <= e[3]*e[3]) && (e[6] <= 0.5E-3)) || (e[6] <= 1E-9)) && (e[7] <= e[6]/10.0)) return max(pow(e[6],1.4), diff(11,9)); else return max(e[6], diff(11,9), diff(11,10)); case 13: // 5696 points e[7] = diff(13,9); if ((e[7] <= pow(e[4],1.5)) && (e[7] < 0.5E-6)) return pow(e[7],1.4); else return max(e[7], max_diff(13)); case 14: // 11392 points e[8] = diff(14,10); if ((e[8] <= pow(e[5],1.5)) && (e[8] < 0.5E-6)) return max(pow(e[8],1.4), diff(14,13)); else return 2.0*max(e[8], diff(14,13)); case 15: // 17088 points e[9] = diff(15,11); if ((e[9] <= pow(e[6],1.5)) && (e[9] < 0.5E-6)) return max(pow(e[9],1.4), diff(15,13)); else return max(e[9], diff(15,14), diff(15,13)); case 17: // 22784 points e[10] = diff(17,13); return max(e[10], max_diff(17)); default: return diff(j,j-4); } } //**************************************************************************** double DoubleIntegral::diff(int j1, int j2) const // Returns the relative difference between c[j1] and c[j2]. // Precondition: j1 > j2 > 0. { return c[j1]==0.0 ? fabs(c[j1] - c[j2]) : fabs((c[j1] - c[j2])/c[j1]); } //**************************************************************************** double DoubleIntegral::max_diff(int j) const // Returns the maximum relative difference between c[j] and c[j-k], k = 1,2,3. // Precondition: j > 3. { double curr_max = fabs(c[j] - c[j-1]); for (int k = j-2; k > j-4; k--) { double d = fabs(c[j] - c[k]); if (d > curr_max) curr_max = d; } return c[j]==0.0 ? curr_max : curr_max/fabs(c[j]); } //**************************************************************************** double DoubleIntegral::min_diff(int j) const // Returns the minimum relative difference between c[j] and c[j-k], k = 1,2,3. // Precondition: j > 3. { double curr_min = fabs(c[j] - c[j-1]); for (int k = j-2; k > j-4; k--) { double d = fabs(c[j] - c[k]); if (d < curr_min) curr_min = d; } return c[j]==0.0 ? curr_min : curr_min/fabs(c[j]); } //**************************************************************************** double DoubleIntegral::go_fer(double x) const // Let s be the maximum integer s.t. x <= 0.5*10^(-s). If x is interpreted as // the relative error in a number, then that number is correct to at least s // significant figures. go_fer returns x^1.4 if s > 3 and x^1.8, otherwise. // Precondition: 0 < x < 1. { if (x == 0.0) return 0.0; else { int s = (int)(NEG_LOG2 - log10(x)); if (s > 3) return pow(x,1.4); else return pow(x,1.8); } } // FRIEND FUNCTIONS //**************************************************************************** BOOL infinite(double x) // Returns TRUE if x is +infinity or -infinity, and FALSE otherwise. { return (fabs(x) >= INFINITY); } //**************************************************************************** double max(double x, double y) // Returns maximum of x and y. { return x > y ? x : y; } //**************************************************************************** double max(double x, double y, double z) // Returns maximum of x, y and z. { if (x > y) return x > z ? x : z; else return y > z ? y : z; } //**************************************************************************** double max(int x, int y) // Returns maximum of x and y. { return x > y ? x : y; } //**************************************************************************** unsigned min(unsigned x, unsigned y) // Returns minimum of x and y. { return x < y ? x : y; } SHAR_EOF fi # end of overwriting check if test -f 'r2d2lri.h' then echo shar: will not over-write existing file "'r2d2lri.h'" else cat << "SHAR_EOF" > 'r2d2lri.h' //****************************************************************************** // r2d2lri.h // Header file for the DoubleIntegral class. // Corresponding implementation file: r2d2lri.cpp. // // Written by Ian Robinson and Michael Hill. // Last updated: 23 April 2001 // //****************************************************************************** // // CLASS PROVIDED: // DoubleIntegral - a class for two-dimensional repeated integrals of // the form // // b h(x) // I I f(x,y) dy dx, // a g(x) // // including an evaluation algorithm referred to as r2d2lri. // // The public functions and member constants are described below. Refer to // the files README.txt and r2d2lri_sample.cpp for comments on, and examples // of, the use of the DoubleIntegral class. // // TYPE DEFINITIONS: // BOUNDARY_FUNCTION = double (*)(double) // INTEGRAND_FUNCTION = double (*)(double,double) // // CONSTRUCTORS: // DoubleIntegral(double req_rel_acc = DEFAULT_REL_TOL, // double req_abs_acc = DEFAULT_ABS_TOL, // unsigned max_evals = DEFAULT_MAX_POINTS) // Sets the relative and absolute accuracies to which the value of the // DoubleIntegral is to be determined to req_rel_acc and req_abs_acc, // respectively. The maximum number of function evaluations to be allowed // in the calculation of the DoubleIntegral is set to max_evals. // Sufficient space is allocated for the algorithm's generation of cubature // approximations and error estimates. Private member values associated // with the algorithm are initialized. // // DoubleIntegral(double a, double b, BOUNDARY_FUNCTION g, // BOUNDARY_FUNCTION h, INTEGRAND_FUNCTION f, // double req_rel_acc = DEFAULT_REL_TOL, // double req_abs_acc = DEFAULT_ABS_TOL, // unsigned max_evals = DEFAULT_MAX_POINTS) // Sets the outer and inner limits of integration to [a,b] and [g(x),h(x)], // respectively, and the integrand function to f(x,y). The relative and // absolute accuracies to which the value of the integral is to be // determined are set to req_rel_acc and req_abs_acc, respectively. The // maximum number of function evaluations to be allowed in the calculation // of the DoubleIntegral is set to max_evals. Sufficient space is // allocated for the algorithm's generation of cubature approximations and // error estimates. Private member values associated with the algorithm // are initialized. // // COPY CONSTRUCTOR: // DoubleIntegral(const DoubleIntegral& I) // Sets the limits of integration, integrand function, requested tolerances // and limit on the number of function evaluations allowed in r2d2lri to // the corresponding values for I. All other private member values are set // to the corresponding member values of I. // // DESTRUCTOR: // ~DoubleIntegral() // Returns space used for the cubature approximations and error estimates // to the heap. // // ASSIGNMENT OPERATOR: // void operator =(const DoubleIntegral& I) // Sets all of the private member values to the corresponding values for I. // // MODIFICATION MEMBER FUNCTIONS: // void set_outer_interval(double a, double b) // Sets the outer interval of integration to [a,b] and re-initializes // private data members associated with the algorithm. // // void set_inner_interval(BOUNDARY_FUNCTION g, BOUNDARY_FUNCTION h) // Sets the inner interval of integration to [g(x),h(x)] and re-initializes // private data members associated with the algorithm. // // void set_integrand(INTEGRAND_FUNCTION f) // Sets the integrand function to f(x,y) and re-intializes private data // members associated with the algorithm. // // void set_rel_tol(double req_rel_acc) // Sets the requested relative error to req_rel_acc and re-intializes // private data members associated with the algorithm. // // void set_abs_tol(double req_abs_acc) // Sets the requested absolute error to req_abs_acc and re-intializes // private data members associated with the algorithm. // // void set_max_evals(unsigned max_evals) // Sets the maximum number of function evaluations to be permitted before // the r2d2lri algorithm is terminated to max_evals and re-intializes // private data members associated with the algorithm. // // void set_new_integral(double a, double b, BOUNDARY_FUNCTION g, // BOUNDARY_FUNCTION h, INTEGRAND_FUNCTION f) // Sets the outer and inner limits of integration to [a,b] and [g(x),h(x)], // respectively, and the integrand function to f(x,y). Data members used // in the evaluation of the DoubleIntegral are re-initialized. All other // private member variables (including rel_tol, abs_tol and max_points) // remain unchanged. // // ACCESS FUNCTIONS: // void get_outer_interval(double& a, double& b) const // Returns the outer interval of integration [a,b]. // // void get_inner_interval(BOUNDARY_FUNCTION& g, BOUNDARY_FUNCTION& h) // Returns the inner interval of integration. // // void get_integrand(INTEGRAND_FUNCTION& f) // Returns the integrand function. // // double get_rel_tol() const // Returns the requested relative error. // // double get_abs_tol() const // Returns the requested absolute error. // // unsigned get_max_evals() const // Returns the maximum number of function values permitted in the r2d2lri // algorithm. // // double value() const // Returns the estimate of the DoubleIntegral computed using the r2d2lri // algorithm. // // double rel_err_est() const // Returns r2d2lri's estimate of the relative error in its approximation // to the DoubleIntegral. It is assumed that the DoubleIntegral has been // already approximated using one of the evaluation functions. If this is // not the case, then the value -1 is returned. // // double abs_err_est() const // Returns r2d2lri's estimate of the absolute error in its approximation // to the DoubleIntegral. It is assumed that the DoubleIntegral has been // already approximated using one of the evaluation functions. If this is // not the case, then the value -1 is returned. // // int evals() const // Returns the number of function evaluations used by the r2d2lri algorithm // in approximating the DoubleIntegral. // // int error_flag() const // Returns the value of the code which indicates the reason for terminating // the r2d2lri algorithm. (-1 => DoubleIntegral not yet evaluated; 0 => // normal convergence; >0 => abnormal termination) // // INTEGRAL EVALUATION FUNCTIONS: // double evaluate() // Returns the value of the approximation to the DoubleIntegral computed // by the r2d2lri algorithm. It is assumed that a, b, g(x), h(x), f(x,y), // the requested relative and absolute accuracies and maximum number of // function values have all been set. // // double evaluate(double req_rel_acc) // Sets the relative accuracy to which the value of the integral is to be // determined to req_rel_acc and returns the approximation which is then // computed by the r2d2lri algorithm. It is assumed that a, b, g(x), h(x), // f(x,y), the requested absolute accuracy and the maximum number of // function values have all been set. // // double evaluate(double& rel_err_est, int& flag, int& evals) // Returns the value of the approximation to the DoubleIntegral computed // by the r2d2lri algorithm, as well as rel_err_est, an estimate of the // relative error in the approximation, flag, an indication of the success // (or otherwise) of the algorithm, and evals, the number of function // values used by r2d2lri in approximating the DoubleIntegral. // // double evaluate(double a, double b, BOUNDARY_FUNCTION g, // BOUNDARY_FUNCTION h, INTEGRAND_FUNCTION f, // double& rel_err_est, int& flag, // double req_rel_acc = DEFAULT_REL_TOL, // double req_abs_acc = DEFAULT_ABS_TOL, // unsigned max_evals = DEFAULT_MAX_POINTS) // Sets the outer and inner limits of integration to [a,b] and [g(x),h(x)], // respectively, and the integrand function to f(x,y). The relative and // absolute accuracies to which the value of the integral is to be // determined are set to req_rel_acc and req_abs_acc, respectively. The // maximum number of function values to be used by the algorithm is set to // max_evals. // Returns the value of the approximation to the DoubleIntegral computed // by the r2d2lri algorithm, as well as rel_err_est, an estimate of the // relative error in the approximation, and flag, an indication of the // success (or otherwise) of the algorithm. // // MEMBER CONSTANTS: // static const unsigned SEED = 89 // SEED is the value of the Fibonacci number upon which the initial // lattice used by r2d2lri is based. // // static const unsigned PREV_FIB_NUMBER = 55 // PREV_FIB_NUMBER is the number which precedes SEED in the Fibonacci // sequence. // // static const unsigned DEFAULT_MAX_POINTS = 22784 // Default maximum number of function evaluations to be used in the // r2d2lri algorithm. // // static const unsigned DEFAULT_C_SIZE = 18 // Default size of the array of cubature approximations used by r2d2lri. // // static const unsigned POINTS = 16*SEED // Maximum number of distinct coordinate values used in the displaced // lattices. // // static const double DEFAULT_REL_TOL = 0.0 // Default value for requested relative accuracy in the computed value // of the DoubleIntegral. // // static const double DEFAULT_ABS_TOL = 0.0 // Default value for requested absolute accuracy in the computed value // of the DoubleIntegral. // // static const double SAFETY = 5.0E-15 // Minimum reported error estimate. // // static const double NEG_LOG2 = -0.301 // Used in the go_fer function (= -log10(2.0)) // //***************************************************************************** // Inclusion of relevant C++ libraries. #include #include #include // Definition of infinity. #define INFINITY HUGE_VAL //Definition of PI. #define PI (double) 4.0*atan(1.0) // Boolean type. typedef int BOOL; #define FALSE 0 #define TRUE 1 // Function types. typedef double (*BOUNDARY_FUNCTION)(double); typedef double (*INTEGRAND_FUNCTION)(double,double); // INTERVAL type. enum INTERVAL { NOT_CHECKED = 0, // Interval not yet characterized. FINITE, // Interval (apparently) finite. LOWER_INFINITE, // Lower limit = -INFINITY, upper limit (apparently) finite. UPPER_INFINITE, // Lower limit (apparently) finite, upper limit = INFINITY. INFINITE // Interval = (-INFINITY, INFINITY). }; // TRANSFORM type. enum TRANSFORM { NONE = 0, RATIONAL, LOGARITHM }; // LATTICE type. enum LATTICE { L0 = 0, // Unused. L1, // L^1(2m) lattice. L2, // L^2(2m) lattice. L3 // L^3(2m) lattice. }; // Default constant values. static const unsigned SEED = 89; static const unsigned PREV_FIB_NUMBER = 55; static const unsigned DEFAULT_MAX_POINTS = 22784; static const unsigned DEFAULT_C_SIZE = 18; static const unsigned POINTS = SEED*16; static const double DEFAULT_ABS_TOL = 0.0; static const double DEFAULT_REL_TOL = 0.0; static const double SAFETY = 5.0E-15; static const double TWO_PI = 2.0*PI; // Constant used in go_fer function. static const double NEG_LOG2 = -0.301; // Ordinates for the cubature rules. static const double coordinate[POINTS] = { 0.00000000000000000e+00, 3.70151578107566934e-20, 4.73788639216271102e-18, 8.09496985454854105e-17, 6.06421909466337077e-16, 2.89154648172758489e-15, 1.03605023972780750e-14, 3.04780354616430713e-14, 7.76079010343289555e-14, 1.76988743312562960e-13, 3.70012880098337741e-13, 7.20993106656226523e-13, 1.32560222639423328e-12, 2.32116955975502917e-12, 3.89901817598361031e-12, 6.31902603544330797e-12, 9.92659362299909352e-12, 1.51721999957994146e-11, 2.26337284616997867e-11, 3.30417423477276766e-11, 4.73078905115436644e-11, 6.65566213929734478e-11, 9.21603834975440627e-11, 1.25778489249740945e-10, 1.69399818150605438e-10, 2.25389534122520332e-10, 2.96539990823799339e-10, 3.86125997567230251e-10, 4.97964617280256072e-10, 6.36479666700258677e-10, 8.06771087706690326e-10, 1.01468935735284428e-09, 1.26691510277414111e-09, 1.57104408571721602e-09, 1.93567771995511848e-09, 2.37051928332888120e-09, 2.88647598458489463e-09, 3.49576704356125671e-09, 4.21203794161488820e-09, 5.05048099747505127e-09, 6.02796242195833420e-09, 7.16315600318552654e-09, 8.47668357210247598e-09, 9.99126239622536727e-09, 1.17318596476062820e-08, 1.37258540890477801e-08, 1.60032051205859970e-08, 1.85966293262107791e-08, 2.15417846586991225e-08, 2.48774623983050423e-08, 2.86457870188754490e-08, 3.28924240927480627e-08, 3.76667963635343393e-08, 4.30223081135982548e-08, 4.90165779507110815e-08, 5.57116801359934699e-08, 6.31743945728497077e-08, 7.14764655741554611e-08, 8.06948695224801182e-08, 9.09120915356085607e-08, 1.02216411247075304e-07, 1.14702197808837003e-07, 1.28470214220587848e-07, 1.43627931087566905e-07, 1.60289849906017584e-07, 1.78577835972737599e-07, 1.98621461012403735e-07, 2.20558355613569855e-07, 2.44534571561419586e-07, 2.70704954152507506e-07, 2.99233524573845080e-07, 3.30293872425780555e-07, 3.64069558465186250e-07, 4.00754527642502705e-07, 4.40553532503197538e-07, 4.83682567021178431e-07, 5.30369310928654745e-07, 5.80853584603871816e-07, 6.35387814575046350e-07, 6.94237509695711398e-07, 7.57681748043535608e-07, 8.26013674591514668e-07, 8.99541009697243496e-07, 9.78586568452766761e-07, 1.06348879093427308e-06, 1.15460228338764572e-06, 1.25229837038261015e-06, 1.35696565796492769e-06, 1.46901060783277425e-06, 1.58885812256011615e-06, 1.71695214188655034e-06, 1.85375625008971554e-06, 1.99975429445300472e-06, 2.15545101483791794e-06, 2.32137268436698954e-06, 2.49806776121980441e-06, 2.68610755154118717e-06, 2.88608688345720417e-06, 3.09862479219116361e-06, 3.32436521626833383e-06, 3.56397770479462469e-06, 3.81815813579099267e-06, 4.08762944556183811e-06, 4.37314236907216246e-06, 4.67547619130474694e-06, 4.99543950956510049e-06, 5.33387100669840688e-06, 5.69164023517917735e-06, 6.06964841203078870e-06, 6.46882922452855641e-06, 6.89014964663646000e-06, 7.33461076612410408e-06, 7.80324862230696338e-06, 8.29713505434942533e-06, 8.81737856006660944e-06, 9.36512516515740974e-06, 9.94155930279767605e-06, 1.05479047035189219e-05, 1.11854252952944232e-05, 1.18554261137510514e-05, 1.25592542224216718e-05, 1.32982996429494278e-05, 1.40739962951517314e-05, 1.48878229468482852e-05, 1.57413041733539759e-05, 1.66360113265340013e-05, 1.75735635133151280e-05, 1.85556285835435169e-05, 1.95839241270761109e-05, 2.06602184799891451e-05, 2.17863317397839193e-05, 2.29641367894665639e-05, 2.41955603303751415e-05, 2.54825839236240433e-05, 2.68272450400322828e-05, 2.82316381183989398e-05, 2.96979156319856818e-05, 3.12282891630629775e-05, 3.28250304853733292e-05, 3.44904726543615734e-05, 3.62270111050190530e-05, 3.80371047571852285e-05, 3.99232771281470884e-05, 4.18881174523735334e-05, 4.39342818082187410e-05, 4.60644942514253813e-05, 4.82815479552554359e-05, 5.05883063570732830e-05, 5.29877043112026462e-05, 5.54827492478759676e-05, 5.80765223380917530e-05, 6.07721796641924570e-05, 6.35729533959725192e-05, 6.64821529721232390e-05, 6.95031662868182815e-05, 7.26394608812407436e-05, 7.58945851398498752e-05, 7.92721694911827500e-05, 8.27759276129834139e-05, 8.64096576414493020e-05, 9.01772433843820158e-05, 9.40826555380268839e-05, 9.81299529073831028e-05, 1.02323283629763653e-04, 1.06666886401381632e-04, 1.11165091706737123e-04, 1.15822323050576229e-04, 1.20643098192191469e-04, 1.25632030381830308e-04, 1.30793829598976237e-04, 1.36133303792264504e-04, 1.41655360120792270e-04, 1.47365006196580764e-04, 1.53267351327944791e-04, 1.59367607763522758e-04, 1.65671091936718320e-04, 1.72183225710302613e-04, 1.78909537620924064e-04, 1.85855664123270733e-04, 1.93027350833628234e-04, 2.00430453772574378e-04, 2.08070940606549813e-04, 2.15954891888042157e-04, 2.24088502294119348e-04, 2.32478081863046224e-04, 2.41130057228716700e-04, 2.50050972852632266e-04, 2.59247492253156010e-04, 2.68726399231769800e-04, 2.78494599096060843e-04, 2.88559119879162389e-04, 2.98927113555372002e-04, 3.09605857251669498e-04, 3.20602754454855385e-04, 3.31925336214029440e-04, 3.43581262338127874e-04, 3.55578322588236471e-04, 3.67924437864395983e-04, 3.80627661386615101e-04, 3.93696179869805359e-04, 4.07138314692351433e-04, 4.20962523058029456e-04, 4.35177399150985206e-04, 4.49791675283483257e-04, 4.64814223036137541e-04, 4.80254054390333129e-04, 4.96120322852548495e-04, 5.12422324570286982e-04, 5.29169499439325787e-04, 5.46371432201990337e-04, 5.64037853536161621e-04, 5.82178641134723760e-04, 6.00803820775158834e-04, 6.19923567378995874e-04, 6.39548206060820769e-04, 6.59688213166553809e-04, 6.80354217300701574e-04, 7.01557000342289967e-04, 7.23307498449185269e-04, 7.45616803050510316e-04, 7.68496161826863103e-04, 7.91956979678045431e-04, 8.16010819678009562e-04, 8.40669404016731257e-04, 8.65944614928718057e-04, 8.91848495607862170e-04, 9.18393251108347948e-04, 9.45591249231324559e-04, 9.73455021397055187e-04, 1.00199726350225483e-03, 1.03123083676232965e-03, 1.06116876853823160e-03, 1.09182425314764315e-03, 1.12321065266020779e-03, 1.15534149767652317e-03, 1.18823048809061470e-03, 1.22189149383560885e-03, 1.25633855561232635e-03, 1.29158588560051701e-03, 1.32764786815245914e-03, 1.36453906046864787e-03, 1.40227419325529847e-03, 1.44086817136339174e-03, 1.48033607440899081e-03, 1.52069315737455968e-03, 1.56195485119101614e-03, 1.60413676330025285e-03, 1.64725467819786275e-03, 1.69132455795580655e-03, 1.73636254272476190e-03, 1.78238495121589614e-03, 1.82940828116180630e-03, 1.87744920975637223e-03, 1.92652459407327098e-03, 1.97665147146290256e-03, 2.02784705992747970e-03, 2.08012875847403649e-03, 2.13351414744511297e-03, 2.18802098882687564e-03, 2.24366722653443576e-03, 2.30047098667413037e-03, 2.35845057778253326e-03, 2.41762449104196590e-03, 2.47801140047228103e-03, 2.53963016309869436e-03, 2.60249981909544255e-03, 2.66663959190504883e-03, 2.73206888833298005e-03, 2.79880729861748242e-03, 2.86687459647438580e-03, 2.93629073911666980e-03, 3.00707586724858787e-03, 3.07925030503414880e-03, 3.15283456003975831e-03, 3.22784932315082657e-03, 3.30431546846215102e-03, 3.38225405314188691e-03, 3.46168631726892175e-03, 3.54263368364347307e-03, 3.62511775757073245e-03, 3.70916032661738247e-03, 3.79478336034081664e-03, 3.88200900999089617e-03, 3.97085960818408102e-03, 4.06135766854977650e-03, 4.15352588534874037e-03, 4.24738713306339935e-03, 4.34296446595992762e-03, 4.44028111762194397e-03, 4.53936050045568819e-03, 4.64022620516654112e-03, 4.74290200020675696e-03, 4.84741183119428050e-03, 4.95377982030252599e-03, 5.06203026562099845e-03, 5.17218764048664258e-03, 5.28427659278580845e-03, 5.39832194422672752e-03, 5.51434868958239693e-03, 5.63238199590377388e-03, 5.75244720170318701e-03, 5.87456981610787535e-03, 5.99877551798357023e-03, 6.12509015502804008e-03, 6.25353974283452212e-03, 6.38415046392496989e-03, 6.51694866675304996e-03, 6.65196086467682556e-03, 6.78921373490106981e-03, 6.92873411738915560e-03, 7.07054901374447394e-03, 7.21468558606133731e-03, 7.36117115574532911e-03, 7.51003320230306536e-03, 7.66129936210133901e-03, 7.81499742709562277e-03, 7.97115534352791039e-03, 8.12980121059388170e-03, 8.29096327907938139e-03, 8.45466994996620623e-03, 8.62094977300720069e-03, 8.78983144527066531e-03, 8.96134380965408770e-03, 9.13551585336721039e-03, 9.31237670638445519e-03, 9.49195563986672844e-03, 9.67428206455263647e-03, 9.85938552911914593e-03, 1.00472957185117282e-02, 1.02380424522440323e-02, 1.04316556826671363e-02, 1.06281654932084312e-02, 1.08276020965801968e-02, 1.10299958329579352e-02, 1.12353771681285305e-02, 1.14437766916083099e-02, 1.16552251147310870e-02, 1.18697532687062706e-02, 1.20873921026471305e-02, 1.23081726815693151e-02, 1.25321261843597210e-02, 1.27592839017158192e-02, 1.29896772340555507e-02, 1.32233376893979039e-02, 1.34602968812142975e-02, 1.37005865262508928e-02, 1.39442384423219669e-02, 1.41912845460744826e-02, 1.44417568507239970e-02, 1.46956874637620529e-02, 1.49531085846352071e-02, 1.52140525023958491e-02, 1.54785515933249730e-02, 1.57466383185270699e-02, 1.60183452214973096e-02, 1.62937049256611910e-02, 1.65727501318868409e-02, 1.68555136159701479e-02, 1.71420282260929243e-02, 1.74323268802542902e-02, 1.77264425636754837e-02, 1.80244083261783018e-02, 1.83262572795373841e-02, 1.86320225948065556e-02, 1.89417374996194499e-02, 1.92554352754646382e-02, 1.95731492549354955e-02, 1.98949128189550399e-02, 2.02207593939759851e-02, 2.05507224491562515e-02, 2.08848354935101867e-02, 2.12231320730357489e-02, 2.15656457678179144e-02, 2.19124101891085722e-02, 2.22634589763831749e-02, 2.26188257943744202e-02, 2.29785443300832403e-02, 2.33426482897673820e-02, 2.37111713959078656e-02, 2.40841473841536133e-02, 2.44616100002445446e-02, 2.48435929969134381e-02, 2.52301301307668662e-02, 2.56212551591455110e-02, 2.60170018369641766e-02, 2.64174039135318149e-02, 2.68224951293518875e-02, 2.72323092129033914e-02, 2.76468798774028783e-02, 2.80662408175478026e-02, 2.84904257062415388e-02, 2.89194681913004093e-02, 2.93534018921430711e-02, 2.97922603964626138e-02, 3.02360772568817211e-02, 3.06848859875912586e-02, 3.11387200609726480e-02, 3.15976129042043956e-02, 3.20615978958531465e-02, 3.25307083624496375e-02, 3.30049775750499268e-02, 3.34844387457822837e-02, 3.39691250243801212e-02, 3.44590694947013617e-02, 3.49543051712346280e-02, 3.54548649955926546e-02, 3.59607818329933182e-02, 3.64720884687286908e-02, 3.69888176046225197e-02, 3.75110018554765440e-02, 3.80386737455060595e-02, 3.85718657047651467e-02, 3.91106100655619800e-02, 3.96549390588646403e-02, 4.02048848106978532e-02, 4.07604793385310817e-02, 4.13217545476584014e-02, 4.18887422275705918e-02, 4.24614740483198794e-02, 4.30399815568777683e-02, 4.36242961734864014e-02, 4.42144491880038934e-02, 4.48104717562440821e-02, 4.54123948963111442e-02, 4.60202494849295286e-02, 4.66340662537696566e-02, 4.72538757857698455e-02, 4.78797085114549123e-02, 4.85115947052519155e-02, 4.91495644818034972e-02, 4.97936477922792864e-02, 5.04438744206858310e-02, 5.11002739801755226e-02, 5.17628759093549835e-02, 5.24317094685933864e-02, 5.31068037363311771e-02, 5.37881876053896748e-02, 5.44758897792820237e-02, 5.51699387685259723e-02, 5.58703628869589583e-02, 5.65771902480559768e-02, 5.72904487612507128e-02, 5.80101661282604184e-02, 5.87363698394150172e-02, 5.94690871699909182e-02, 6.02083451765500248e-02, 6.09541706932844226e-02, 6.17065903283672315e-02, 6.24656304603101097e-02, 6.32313172343278957e-02, 6.40036765587108763e-02, 6.47827341012051681e-02, 6.55685152854017022e-02, 6.63610452871343001e-02, 6.71603490308873295e-02, 6.79664511862134315e-02, 6.87793761641618055e-02, 6.95991481137175444e-02, 7.04257909182525078e-02, 7.12593281919882230e-02, 7.20997832764713036e-02, 7.29471792370618745e-02, 7.38015388594354909e-02, 7.46628846460990424e-02, 7.55312388129211268e-02, 7.64066232856773830e-02, 7.72890596966112699e-02, 7.81785693810107755e-02, 7.90751733738015438e-02, 7.99788924061569021e-02, 8.08897469021252732e-02, 8.18077569752754555e-02, 8.27329424253602508e-02, 8.36653227349989222e-02, 8.46049170663789600e-02, 8.55517442579776343e-02, 8.65058228213038094e-02, 8.74671709376604977e-02, 8.84358064549286238e-02, 8.94117468843724731e-02, 9.03950093974672943e-02, 9.13856108227495241e-02, 9.23835676426901022e-02, 9.33888959905913408e-02, 9.44016116475078111e-02, 9.54217300391917094e-02, 9.64492662330631607e-02, 9.74842349352059163e-02, 9.85266504873889012e-02, 9.95765268641140625e-02, 1.00633877669690969e-01, 1.01698716135338609e-01, 1.02771055116314834e-01, 1.03850907089073884e-01, 1.04938284148452445e-01, 1.06033198004884661e-01, 1.07135659981646548e-01, 1.08245681012130237e-01, 1.09363271637148468e-01, 1.10488442002269772e-01, 1.11621201855184748e-01, 1.12761560543103875e-01, 1.13909527010187251e-01, 1.15065109795006693e-01, 1.16228317028040586e-01, 1.17399156429201915e-01, 1.18577635305399847e-01, 1.19763760548135297e-01, 1.20957538631130845e-01, 1.22158975607995411e-01, 1.23368077109924078e-01, 1.24584848343433430e-01, 1.25809294088132801e-01, 1.27041418694531812e-01, 1.28281226081884550e-01, 1.29528719736070779e-01, 1.30783902707514533e-01, 1.32046777609140456e-01, 1.33317346614368245e-01, 1.34595611455145539e-01, 1.35881573420019617e-01, 1.37175233352248233e-01, 1.38476591647949929e-01, 1.39785648254294165e-01, 1.41102402667731592e-01, 1.42426853932264786e-01, 1.43759000637759771e-01, 1.45098840918298648e-01, 1.46446372450573622e-01, 1.47801592452322758e-01, 1.49164497680807742e-01, 1.50535084431333961e-01, 1.51913348535813175e-01, 1.53299285361369088e-01, 1.54692889808986069e-01, 1.56094156312201328e-01, 1.57503078835840791e-01, 1.58919650874798961e-01, 1.60343865452862998e-01, 1.61775715121581303e-01, 1.63215191959176820e-01, 1.64662287569505330e-01, 1.66116993081058954e-01, 1.67579299146015100e-01, 1.69049195939331091e-01, 1.70526673157884678e-01, 1.72011720019660668e-01, 1.73504325262983867e-01, 1.75004477145798542e-01, 1.76512163444994604e-01, 1.78027371455780700e-01, 1.79550087991104400e-01, 1.81080299381119667e-01, 1.82617991472701765e-01, 1.84163149629009795e-01, 1.85715758729097010e-01, 1.87275803167569064e-01, 1.88843266854290349e-01, 1.90418133214138563e-01, 1.92000385186807647e-01, 1.93590005226659219e-01, 1.95186975302622640e-01, 1.96791276898143818e-01, 1.98402891011182875e-01, 2.00021798154260778e-01, 2.01647978354555034e-01, 2.03281411154044547e-01, 2.04922075609703722e-01, 2.06569950293745898e-01, 2.08225013293916183e-01, 2.09887242213833772e-01, 2.11556614173383790e-01, 2.13233105809158731e-01, 2.14916693274949542e-01, 2.16607352242286386e-01, 2.18305057901029134e-01, 2.20009784960007597e-01, 2.21721507647711547e-01, 2.23440199713030520e-01, 2.25165834426043427e-01, 2.26898384578857974e-01, 2.28637822486499880e-01, 2.30384119987851900e-01, 2.32137248446642621e-01, 2.33897178752485023e-01, 2.35663881321964764e-01, 2.37437326099778166e-01, 2.39217482559919849e-01, 2.41004319706919971e-01, 2.42797806077131024e-01, 2.44597909740064106e-01, 2.46404598299774630e-01, 2.48217838896297364e-01, 2.50037598207130744e-01, 2.51863842448770367e-01, 2.53696537378291555e-01, 2.55535648294980917e-01, 2.57381140042016775e-01, 2.59232977008198353e-01, 2.61091123129723609e-01, 2.62955541892015583e-01, 2.64826196331597119e-01, 2.66703049038013833e-01, 2.68586062155805172e-01, 2.70475197386523418e-01, 2.72370415990800471e-01, 2.74271678790462248e-01, 2.76178946170690532e-01, 2.78092178082232079e-01, 2.80011334043654811e-01, 2.81936373143650897e-01, 2.83867254043386530e-01, 2.85803934978898182e-01, 2.87746373763535149e-01, 2.89694527790448151e-01, 2.91648354035123771e-01, 2.93607809057964506e-01, 2.95572849006914192e-01, 2.97543429620128558e-01, 2.99519506228690677e-01, 3.01501033759371037e-01, 3.03487966737431991e-01, 3.05480259289476316e-01, 3.07477865146339605e-01, 3.09480737646026212e-01, 3.11488829736688484e-01, 3.13502093979648963e-01, 3.15520482552465288e-01, 3.17543947252037481e-01, 3.19572439497757316e-01, 3.21605910334699450e-01, 3.23644310436854015e-01, 3.25687590110400326e-01, 3.27735699297021389e-01, 3.29788587577258870e-01, 3.31846204173908181e-01, 3.33908497955453338e-01, 3.35975417439541249e-01, 3.38046910796495051e-01, 3.40122925852866160e-01, 3.42203410095024649e-01, 3.44288310672787586e-01, 3.46377574403084953e-01, 3.48471147773662758e-01, 3.50568976946822966e-01, 3.52671007763199834e-01, 3.54777185745572261e-01, 3.56887456102711761e-01, 3.59001763733265622e-01, 3.61120053229674869e-01, 3.63242268882126585e-01, 3.65368354682540185e-01, 3.67498254328587211e-01, 3.69631911227744204e-01, 3.71769268501378237e-01, 3.73910268988864643e-01, 3.76054855251736512e-01, 3.78202969577865497e-01, 3.80354553985673474e-01, 3.82509550228374595e-01, 3.84667899798247282e-01, 3.86829543930935679e-01, 3.88994423609780096e-01, 3.91162479570175980e-01, 3.93333652303960914e-01, 3.95507882063829173e-01, 3.97685108867773352e-01, 3.99865272503552564e-01, 4.02048312533186717e-01, 4.04234168297476384e-01, 4.06422778920547739e-01, 4.08614083314422079e-01, 4.10808020183609407e-01, 4.13004528029725565e-01, 4.15203545156132416e-01, 4.17405009672600530e-01, 4.19608859499993877e-01, 4.21815032374975994e-01, 4.24023465854737081e-01, 4.26234097321741532e-01, 4.28446863988495324e-01, 4.30661702902332762e-01, 4.32878550950222024e-01, 4.35097344863588965e-01, 4.37318021223158639e-01, 4.39540516463813993e-01, 4.41764766879471181e-01, 4.43990708627970946e-01, 4.46218277735985514e-01, 4.48447410103940459e-01, 4.50678041510950955e-01, 4.52910107619771873e-01, 4.55143543981761167e-01, 4.57378286041855959e-01, 4.59614269143560784e-01, 4.61851428533947412e-01, 4.64089699368665686e-01, 4.66329016716964798e-01, 4.68569315566724441e-01, 4.70810530829495248e-01, 4.73052597345547964e-01, 4.75295449888930758e-01, 4.77539023172534103e-01, 4.79783251853162650e-01, 4.82028070536613510e-01, 4.84273413782760374e-01, 4.86519216110642875e-01, 4.88765412003560625e-01, 4.91011935914171342e-01, 4.93258722269592470e-01, 4.95505705476505732e-01, 4.97752819926264013e-01, 5.00000000000000000e-01, 5.02247180073735987e-01, 5.04494294523494268e-01, 5.06741277730407530e-01, 5.08988064085828658e-01, 5.11234587996439375e-01, 5.13480783889357125e-01, 5.15726586217239626e-01, 5.17971929463386490e-01, 5.20216748146837350e-01, 5.22460976827465897e-01, 5.24704550111069242e-01, 5.26947402654452036e-01, 5.29189469170504752e-01, 5.31430684433275559e-01, 5.33670983283035202e-01, 5.35910300631334314e-01, 5.38148571466052588e-01, 5.40385730856439216e-01, 5.42621713958144041e-01, 5.44856456018238833e-01, 5.47089892380228127e-01, 5.49321958489049045e-01, 5.51552589896059541e-01, 5.53781722264014486e-01, 5.56009291372029054e-01, 5.58235233120528819e-01, 5.60459483536186007e-01, 5.62681978776841361e-01, 5.64902655136411035e-01, 5.67121449049777976e-01, 5.69338297097667238e-01, 5.71553136011504676e-01, 5.73765902678258468e-01, 5.75976534145262919e-01, 5.78184967625024006e-01, 5.80391140500006123e-01, 5.82594990327399470e-01, 5.84796454843867584e-01, 5.86995471970274435e-01, 5.89191979816390593e-01, 5.91385916685577921e-01, 5.93577221079452261e-01, 5.95765831702523616e-01, 5.97951687466813283e-01, 6.00134727496447436e-01, 6.02314891132226648e-01, 6.04492117936170827e-01, 6.06666347696039086e-01, 6.08837520429824020e-01, 6.11005576390219904e-01, 6.13170456069064321e-01, 6.15332100201752718e-01, 6.17490449771625405e-01, 6.19645446014326526e-01, 6.21797030422134503e-01, 6.23945144748263488e-01, 6.26089731011135357e-01, 6.28230731498621763e-01, 6.30368088772255796e-01, 6.32501745671412789e-01, 6.34631645317459815e-01, 6.36757731117873415e-01, 6.38879946770325131e-01, 6.40998236266734378e-01, 6.43112543897288239e-01, 6.45222814254427739e-01, 6.47328992236800166e-01, 6.49431023053177034e-01, 6.51528852226337242e-01, 6.53622425596915047e-01, 6.55711689327212414e-01, 6.57796589904975351e-01, 6.59877074147133840e-01, 6.61953089203504949e-01, 6.64024582560458751e-01, 6.66091502044546662e-01, 6.68153795826091819e-01, 6.70211412422741130e-01, 6.72264300702978611e-01, 6.74312409889599674e-01, 6.76355689563145985e-01, 6.78394089665300550e-01, 6.80427560502242684e-01, 6.82456052747962519e-01, 6.84479517447534712e-01, 6.86497906020351037e-01, 6.88511170263311516e-01, 6.90519262353973788e-01, 6.92522134853660395e-01, 6.94519740710523684e-01, 6.96512033262568009e-01, 6.98498966240628963e-01, 7.00480493771309323e-01, 7.02456570379871442e-01, 7.04427150993085808e-01, 7.06392190942035494e-01, 7.08351645964876229e-01, 7.10305472209551849e-01, 7.12253626236464851e-01, 7.14196065021101818e-01, 7.16132745956613470e-01, 7.18063626856349103e-01, 7.19988665956345189e-01, 7.21907821917767921e-01, 7.23821053829309468e-01, 7.25728321209537752e-01, 7.27629584009199529e-01, 7.29524802613476582e-01, 7.31413937844194828e-01, 7.33296950961986167e-01, 7.35173803668402881e-01, 7.37044458107984417e-01, 7.38908876870276391e-01, 7.40767022991801647e-01, 7.42618859957983225e-01, 7.44464351705019083e-01, 7.46303462621708445e-01, 7.48136157551229633e-01, 7.49962401792869256e-01, 7.51782161103702636e-01, 7.53595401700225370e-01, 7.55402090259935894e-01, 7.57202193922868976e-01, 7.58995680293080029e-01, 7.60782517440080151e-01, 7.62562673900221834e-01, 7.64336118678035236e-01, 7.66102821247514977e-01, 7.67862751553357379e-01, 7.69615880012148100e-01, 7.71362177513500120e-01, 7.73101615421142026e-01, 7.74834165573956573e-01, 7.76559800286969480e-01, 7.78278492352288453e-01, 7.79990215039992403e-01, 7.81694942098970866e-01, 7.83392647757713614e-01, 7.85083306725050458e-01, 7.86766894190841269e-01, 7.88443385826616210e-01, 7.90112757786166228e-01, 7.91774986706083817e-01, 7.93430049706254102e-01, 7.95077924390296278e-01, 7.96718588845955453e-01, 7.98352021645444966e-01, 7.99978201845739222e-01, 8.01597108988817125e-01, 8.03208723101856182e-01, 8.04813024697377360e-01, 8.06409994773340781e-01, 8.07999614813192353e-01, 8.09581866785861437e-01, 8.11156733145709651e-01, 8.12724196832430936e-01, 8.14284241270902990e-01, 8.15836850370990205e-01, 8.17382008527298235e-01, 8.18919700618880333e-01, 8.20449912008895600e-01, 8.21972628544219300e-01, 8.23487836555005396e-01, 8.24995522854201458e-01, 8.26495674737016133e-01, 8.27988279980339332e-01, 8.29473326842115322e-01, 8.30950804060668909e-01, 8.32420700853984900e-01, 8.33883006918941046e-01, 8.35337712430494670e-01, 8.36784808040823180e-01, 8.38224284878418697e-01, 8.39656134547137002e-01, 8.41080349125201039e-01, 8.42496921164159209e-01, 8.43905843687798672e-01, 8.45307110191013931e-01, 8.46700714638630912e-01, 8.48086651464186825e-01, 8.49464915568666039e-01, 8.50835502319192258e-01, 8.52198407547677242e-01, 8.53553627549426378e-01, 8.54901159081701352e-01, 8.56240999362240229e-01, 8.57573146067735214e-01, 8.58897597332268408e-01, 8.60214351745705835e-01, 8.61523408352050071e-01, 8.62824766647751767e-01, 8.64118426579980383e-01, 8.65404388544854461e-01, 8.66682653385631755e-01, 8.67953222390859544e-01, 8.69216097292485467e-01, 8.70471280263929221e-01, 8.71718773918115450e-01, 8.72958581305468188e-01, 8.74190705911867199e-01, 8.75415151656566570e-01, 8.76631922890075922e-01, 8.77841024392004589e-01, 8.79042461368869155e-01, 8.80236239451864703e-01, 8.81422364694600153e-01, 8.82600843570798085e-01, 8.83771682971959414e-01, 8.84934890204993307e-01, 8.86090472989812749e-01, 8.87238439456896125e-01, 8.88378798144815252e-01, 8.89511557997730228e-01, 8.90636728362851532e-01, 8.91754318987869763e-01, 8.92864340018353452e-01, 8.93966801995115339e-01, 8.95061715851547555e-01, 8.96149092910926116e-01, 8.97228944883685166e-01, 8.98301283864661391e-01, 8.99366122330309031e-01, 9.00423473135885938e-01, 9.01473349512611099e-01, 9.02515765064794084e-01, 9.03550733766936839e-01, 9.04578269960808291e-01, 9.05598388352492189e-01, 9.06611104009408659e-01, 9.07616432357309898e-01, 9.08614389177250476e-01, 9.09604990602532706e-01, 9.10588253115627527e-01, 9.11564193545071376e-01, 9.12532829062339502e-01, 9.13494177178696191e-01, 9.14448255742022366e-01, 9.15395082933621040e-01, 9.16334677265001078e-01, 9.17267057574639749e-01, 9.18192243024724545e-01, 9.19110253097874727e-01, 9.20021107593843098e-01, 9.20924826626198456e-01, 9.21821430618989224e-01, 9.22710940303388730e-01, 9.23593376714322617e-01, 9.24468761187078873e-01, 9.25337115353900958e-01, 9.26198461140564509e-01, 9.27052820762938126e-01, 9.27900216723528696e-01, 9.28740671808011777e-01, 9.29574209081747492e-01, 9.30400851886282456e-01, 9.31220623835838195e-01, 9.32033548813786569e-01, 9.32839650969112670e-01, 9.33638954712865700e-01, 9.34431484714598298e-01, 9.35217265898794832e-01, 9.35996323441289124e-01, 9.36768682765672104e-01, 9.37534369539689890e-01, 9.38293409671632769e-01, 9.39045829306715577e-01, 9.39791654823449975e-01, 9.40530912830009082e-01, 9.41263630160584983e-01, 9.41989833871739582e-01, 9.42709551238749287e-01, 9.43422809751944023e-01, 9.44129637113041042e-01, 9.44830061231474028e-01, 9.45524110220717976e-01, 9.46211812394610325e-01, 9.46893196263668823e-01, 9.47568290531406614e-01, 9.48237124090645017e-01, 9.48899726019824477e-01, 9.49556125579314169e-01, 9.50206352207720714e-01, 9.50850435518196503e-01, 9.51488405294748084e-01, 9.52120291488545088e-01, 9.52746124214230155e-01, 9.53365933746230343e-01, 9.53979750515070471e-01, 9.54587605103688856e-01, 9.55189528243755918e-01, 9.55785550811996107e-01, 9.56375703826513599e-01, 9.56960018443122232e-01, 9.57538525951680121e-01, 9.58111257772429408e-01, 9.58678245452341599e-01, 9.59239520661468918e-01, 9.59795115189302147e-01, 9.60345060941135360e-01, 9.60889389934438020e-01, 9.61428134295234853e-01, 9.61961326254493940e-01, 9.62488998144523456e-01, 9.63011182395377480e-01, 9.63527911531271309e-01, 9.64039218167006682e-01, 9.64545135004407345e-01, 9.65045694828765372e-01, 9.65540930505298638e-01, 9.66030874975619879e-01, 9.66515561254217716e-01, 9.66995022424950073e-01, 9.67469291637550363e-01, 9.67938402104146853e-01, 9.68402387095795604e-01, 9.68861279939027352e-01, 9.69315114012408741e-01, 9.69763922743118279e-01, 9.70207739603537386e-01, 9.70646598107856929e-01, 9.71080531808699591e-01, 9.71509574293758461e-01, 9.71933759182452197e-01, 9.72353120122597122e-01, 9.72767690787096609e-01, 9.73177504870648112e-01, 9.73582596086468185e-01, 9.73982998163035823e-01, 9.74378744840854489e-01, 9.74769869869233134e-01, 9.75156407003086562e-01, 9.75538389999755455e-01, 9.75915852615846387e-01, 9.76288828604092134e-01, 9.76657351710232618e-01, 9.77021455669916760e-01, 9.77381174205625580e-01, 9.77736541023616825e-01, 9.78087589810891428e-01, 9.78434354232182086e-01, 9.78776867926964251e-01, 9.79115164506489813e-01, 9.79449277550843748e-01, 9.79779240606024015e-01, 9.80105087181044960e-01, 9.80426850745064505e-01, 9.80744564724535362e-01, 9.81058262500380550e-01, 9.81367977405193444e-01, 9.81673742720462616e-01, 9.81975591673821698e-01, 9.82273557436324516e-01, 9.82567673119745710e-01, 9.82857971773907076e-01, 9.83144486384029852e-01, 9.83427249868113159e-01, 9.83706295074338809e-01, 9.83981654778502690e-01, 9.84253361681472930e-01, 9.84521448406675027e-01, 9.84785947497604151e-01, 9.85046891415364793e-01, 9.85304312536237947e-01, 9.85558243149276003e-01, 9.85808715453925517e-01, 9.86055761557678033e-01, 9.86299413473749107e-01, 9.86539703118785703e-01, 9.86776662310602096e-01, 9.87010322765944449e-01, 9.87240716098284181e-01, 9.87467873815640279e-01, 9.87691827318430685e-01, 9.87912607897352870e-01, 9.88130246731293729e-01, 9.88344774885268913e-01, 9.88556223308391690e-01, 9.88764622831871470e-01, 9.88970004167042065e-01, 9.89172397903419803e-01, 9.89371834506791569e-01, 9.89568344317332864e-01, 9.89761957547755968e-01, 9.89952704281488272e-01, 9.90140614470880854e-01, 9.90325717935447364e-01, 9.90508044360133272e-01, 9.90687623293615545e-01, 9.90864484146632790e-01, 9.91038656190345912e-01, 9.91210168554729335e-01, 9.91379050226992799e-01, 9.91545330050033794e-01, 9.91709036720920619e-01, 9.91870198789406118e-01, 9.92028844656472090e-01, 9.92185002572904377e-01, 9.92338700637898661e-01, 9.92489966797696935e-01, 9.92638828844254671e-01, 9.92785314413938663e-01, 9.92929450986255526e-01, 9.93071265882610844e-01, 9.93210786265098930e-01, 9.93348039135323174e-01, 9.93483051333246950e-01, 9.93615849536075030e-01, 9.93746460257165478e-01, 9.93874909844971960e-01, 9.94001224482016430e-01, 9.94125430183892125e-01, 9.94247552798296813e-01, 9.94367618004096226e-01, 9.94485651310417603e-01, 9.94601678055773272e-01, 9.94715723407214192e-01, 9.94827812359513357e-01, 9.94937969734379002e-01, 9.95046220179697474e-01, 9.95152588168805720e-01, 9.95257097999793243e-01, 9.95359773794833459e-01, 9.95460639499544312e-01, 9.95559718882378056e-01, 9.95657035534040072e-01, 9.95752612866936601e-01, 9.95846474114651260e-01, 9.95938642331450224e-01, 9.96029140391815919e-01, 9.96117990990009104e-01, 9.96205216639659183e-01, 9.96290839673382618e-01, 9.96374882242429268e-01, 9.96457366316356527e-01, 9.96538313682731078e-01, 9.96617745946858113e-01, 9.96695684531537849e-01, 9.96772150676849173e-01, 9.96847165439960242e-01, 9.96920749694965851e-01, 9.96992924132751412e-01, 9.97063709260883330e-01, 9.97133125403525614e-01, 9.97201192701382518e-01, 9.97267931111667020e-01, 9.97333360408094951e-01, 9.97397500180904557e-01, 9.97460369836901306e-01, 9.97521988599527719e-01, 9.97582375508958034e-01, 9.97641549422217467e-01, 9.97699529013325870e-01, 9.97756332773465564e-01, 9.97811979011173124e-01, 9.97866485852554887e-01, 9.97919871241525964e-01, 9.97972152940072520e-01, 9.98023348528537097e-01, 9.98073475405926729e-01, 9.98122550790243628e-01, 9.98170591718838194e-01, 9.98217615048784104e-01, 9.98263637457275238e-01, 9.98308675442044193e-01, 9.98352745321802137e-01, 9.98395863236699747e-01, 9.98438045148808984e-01, 9.98479306842625440e-01, 9.98519663925591009e-01, 9.98559131828636608e-01, 9.98597725806744702e-01, 9.98635460939531352e-01, 9.98672352131847541e-01, 9.98708414114399483e-01, 9.98743661444387674e-01, 9.98778108506164391e-01, 9.98811769511909385e-01, 9.98844658502323477e-01, 9.98876789347339792e-01, 9.98908175746852357e-01, 9.98938831231461768e-01, 9.98968769163237670e-01, 9.98998002736497745e-01, 9.99026544978602945e-01, 9.99054408750768675e-01, 9.99081606748891652e-01, 9.99108151504392138e-01, 9.99134055385071282e-01, 9.99159330595983269e-01, 9.99183989180321990e-01, 9.99208043020321955e-01, 9.99231503838173137e-01, 9.99254383196949490e-01, 9.99276692501550815e-01, 9.99298442999657710e-01, 9.99319645782699298e-01, 9.99340311786833446e-01, 9.99360451793939179e-01, 9.99380076432621004e-01, 9.99399196179224841e-01, 9.99417821358865276e-01, 9.99435962146463838e-01, 9.99453628567798010e-01, 9.99470830500560674e-01, 9.99487577675429713e-01, 9.99503879677147452e-01, 9.99519745945609667e-01, 9.99535185776963862e-01, 9.99550208324716517e-01, 9.99564822600849015e-01, 9.99579037476941971e-01, 9.99592861685307649e-01, 9.99606303820130195e-01, 9.99619372338613385e-01, 9.99632075562135604e-01, 9.99644421677411764e-01, 9.99656418737661872e-01, 9.99668074663785971e-01, 9.99679397245545145e-01, 9.99690394142748331e-01, 9.99701072886444628e-01, 9.99711440880120838e-01, 9.99721505400903939e-01, 9.99731273600768230e-01, 9.99740752507746844e-01, 9.99749949027147368e-01, 9.99758869942771283e-01, 9.99767521918136954e-01, 9.99775911497705881e-01, 9.99784045108111958e-01, 9.99791929059393450e-01, 9.99799569546227426e-01, 9.99806972649166372e-01, 9.99814144335876729e-01, 9.99821090462379076e-01, 9.99827816774289697e-01, 9.99834328908063282e-01, 9.99840632392236477e-01, 9.99846732648672055e-01, 9.99852634993803419e-01, 9.99858344639879208e-01, 9.99863866696207735e-01, 9.99869206170401024e-01, 9.99874367969618170e-01, 9.99879356901807809e-01, 9.99884177676949424e-01, 9.99888834908293263e-01, 9.99893333113598618e-01, 9.99897676716370236e-01, 9.99901870047092617e-01, 9.99905917344461973e-01, 9.99909822756615618e-01, 9.99913590342358551e-01, 9.99917224072387017e-01, 9.99920727830508817e-01, 9.99924105414860150e-01, 9.99927360539118759e-01, 9.99930496833713182e-01, 9.99933517847027877e-01, 9.99936427046604027e-01, 9.99939227820335808e-01, 9.99941923477661908e-01, 9.99944517250752124e-01, 9.99947012295688797e-01, 9.99949411693642927e-01, 9.99951718452044745e-01, 9.99953935505748575e-01, 9.99956065718191781e-01, 9.99958111882547626e-01, 9.99960076722871853e-01, 9.99961962895242815e-01, 9.99963772988894981e-01, 9.99965509527345638e-01, 9.99967174969514627e-01, 9.99968771710836937e-01, 9.99970302084368014e-01, 9.99971768361881601e-01, 9.99973172754959968e-01, 9.99974517416076376e-01, 9.99975804439669625e-01, 9.99977035863210533e-01, 9.99978213668260216e-01, 9.99979339781520011e-01, 9.99980416075872924e-01, 9.99981444371416456e-01, 9.99982426436486685e-01, 9.99983363988673466e-01, 9.99984258695826646e-01, 9.99985112177053152e-01, 9.99985926003704848e-01, 9.99986701700357051e-01, 9.99987440745777578e-01, 9.99988144573886249e-01, 9.99988814574704706e-01, 9.99989452095296481e-01, 9.99990058440697202e-01, 9.99990634874834843e-01, 9.99991182621439933e-01, 9.99991702864945651e-01, 9.99992196751377693e-01, 9.99992665389233876e-01, 9.99993109850353364e-01, 9.99993531170775471e-01, 9.99993930351587969e-01, 9.99994308359764821e-01, 9.99994666128993302e-01, 9.99995004560490435e-01, 9.99995324523808695e-01, 9.99995626857630928e-01, 9.99995912370554438e-01, 9.99996181841864209e-01, 9.99996436022295205e-01, 9.99996675634783732e-01, 9.99996901375207809e-01, 9.99997113913116543e-01, 9.99997313892448459e-01, 9.99997501932238780e-01, 9.99997678627315633e-01, 9.99997844548985162e-01, 9.99998000245705547e-01, 9.99998146243749910e-01, 9.99998283047858113e-01, 9.99998411141877440e-01, 9.99998530989392167e-01, 9.99998643034342035e-01, 9.99998747701629617e-01, 9.99998845397716612e-01, 9.99998936511209066e-01, 9.99999021413431547e-01, 9.99999100458990303e-01, 9.99999173986325408e-01, 9.99999242318251956e-01, 9.99999305762490304e-01, 9.99999364612185425e-01, 9.99999419146415396e-01, 9.99999469630689071e-01, 9.99999516317432979e-01, 9.99999559446467497e-01, 9.99999599245472357e-01, 9.99999635930441535e-01, 9.99999669706127574e-01, 9.99999700766475426e-01, 9.99999729295045847e-01, 9.99999755465428439e-01, 9.99999779441644386e-01, 9.99999801378538988e-01, 9.99999821422164027e-01, 9.99999839710150094e-01, 9.99999856372068912e-01, 9.99999871529785779e-01, 9.99999885297802191e-01, 9.99999897783588753e-01, 9.99999909087908464e-01, 9.99999919305130478e-01, 9.99999928523534426e-01, 9.99999936825605427e-01, 9.99999944288319864e-01, 9.99999950983422049e-01, 9.99999956977691886e-01, 9.99999962333203636e-01, 9.99999967107575907e-01, 9.99999971354212981e-01, 9.99999975122537602e-01, 9.99999978458215341e-01, 9.99999981403370674e-01, 9.99999983996794879e-01, 9.99999986274145911e-01, 9.99999988268140352e-01, 9.99999990008737604e-01, 9.99999991523316428e-01, 9.99999992836843997e-01, 9.99999993972037578e-01, 9.99999994949519003e-01, 9.99999995787962058e-01, 9.99999996504232956e-01, 9.99999997113524015e-01, 9.99999997629480717e-01, 9.99999998064322280e-01, 9.99999998428955914e-01, 9.99999998733084897e-01, 9.99999998985310643e-01, 9.99999999193228912e-01, 9.99999999363520333e-01, 9.99999999502035383e-01, 9.99999999613874002e-01, 9.99999999703460009e-01, 9.99999999774610466e-01, 9.99999999830600182e-01, 9.99999999874221511e-01, 9.99999999907839617e-01, 9.99999999933443379e-01, 9.99999999952692109e-01, 9.99999999966958258e-01, 9.99999999977366272e-01, 9.99999999984827800e-01, 9.99999999990073406e-01, 9.99999999993680974e-01, 9.99999999996100982e-01, 9.99999999997678830e-01, 9.99999999998674398e-01, 9.99999999999279007e-01, 9.99999999999629987e-01, 9.99999999999823011e-01, 9.99999999999922392e-01, 9.99999999999969522e-01, 9.99999999999989639e-01, 9.99999999999997108e-01, 9.99999999999999394e-01, 9.99999999999999919e-01, 9.99999999999999995e-01, 1.00000000000000000e+00 }; // Weights for the cubature rules. static const double weight[POINTS] = { 0.00000000000000000e+00, 3.68966693982259570e-16, 2.36135236163851335e-14, 2.68966246778194856e-13, 1.51117724604519089e-12, 5.76443119106347665e-12, 1.72115777765039178e-11, 4.33984223177292195e-11, 9.66927508827969114e-11, 1.96007692148083204e-10, 3.68788946027512842e-10, 6.53265337084159831e-10, 1.10096207880257650e-09, 1.77947606299532627e-09, 2.77551241695252807e-09, 4.19818149943343009e-09, 6.18255543525875242e-09, 8.89348321710637371e-09, 1.25296633321554548e-08, 1.73279728004798243e-08, 2.35680514415748858e-08, 3.15771401151278980e-08, 4.17351716121236247e-08, 5.44801128026304109e-08, 7.03135565771500222e-08, 8.98065620492523309e-08, 1.13605741418367350e-07, 1.42439591823086335e-07, 1.77125070447144772e-07, 2.18574411072437080e-07, 2.67802180205959653e-07, 3.25932570840509480e-07, 3.94206931842293587e-07, 4.73991530892343932e-07, 5.66785548842796589e-07, 6.74229303283696796e-07, 7.98112699051046140e-07, 9.40383903342328240e-07, 1.10315824304174810e-06, 1.28872732179391101e-06, 1.49956835430166281e-06, 1.73835371526132706e-06, 2.00796070028662000e-06, 2.31148149611111296e-06, 2.65223335729825746e-06, 3.03376898662770350e-06, 3.45988711626693812e-06, 3.93464328677816254e-06, 4.46236082095182397e-06, 5.04764198940033469e-06, 5.69537936478825866e-06, 6.41076736151863585e-06, 7.19931395763916027e-06, 8.06685259567663848e-06, 9.01955425905354564e-06, 1.00639397206865749e-05, 1.12068919603138562e-05, 1.24556687470450130e-05, 1.38179153835764398e-05, 1.53016776084631346e-05, 1.69154146527881135e-05, 1.86680124475208848e-05, 2.05687969778076780e-05, 2.26275477803881128e-05, 2.48545115802857764e-05, 2.72604160628737521e-05, 2.98564837773705240e-05, 3.26544461677768870e-05, 3.56665577272205129e-05, 3.89056102716316880e-05, 4.23849473286314457e-05, 4.61184786374718751e-05, 5.01206947558278155e-05, 5.44066817691994417e-05, 5.89921360986464216e-05, 6.38933794025363972e-05, 6.91273735679535015e-05, 7.47117357873764980e-05, 8.06647537162009095e-05, 8.70054007066452145e-05, 9.37533511135478192e-05, 1.00928995667529091e-04, 1.08553456910961249e-04, 1.16648604692158390e-04, 1.25237071713169329e-04, 1.34342269126527354e-04, 1.43988402176283337e-04, 1.54200485878621995e-04, 1.65004360737335414e-04, 1.76426708489403275e-04, 1.88495067875905520e-04, 2.01237850433470520e-04, 2.14684356301440128e-04, 2.28864790039912336e-04, 2.43810276453802595e-04, 2.59552876418046254e-04, 2.76125602699046955e-04, 2.93562435767459274e-04, 3.11898339597378356e-04, 3.31169277446994815e-04, 3.51412227615759705e-04, 3.72665199173092016e-04, 3.94967247653649748e-04, 4.18358490714175374e-04, 4.42880123746917248e-04, 4.68574435444620360e-04, 4.95484823312072716e-04, 5.23655809119187603e-04, 5.53133054290597009e-04, 5.83963375226727598e-04, 6.16194758551327770e-04, 6.49876376280412640e-04, 6.85058600907593034e-04, 7.21793020400755071e-04, 7.60132453105058308e-04, 8.00130962547223052e-04, 8.41843872136081038e-04, 8.85327779754368423e-04, 9.30640572236745823e-04, 9.77841439729037039e-04, 1.02699088992368604e-03, 1.07815076216644088e-03, 1.13138424142928326e-03, 1.18675587214463373e-03, 1.24433157189587487e-03, 1.30417864495924788e-03, 1.36636579569219284e-03, 1.43096314176321812e-03, 1.49804222721840103e-03, 1.56767603537963973e-03, 1.63993900156979466e-03, 1.71490702565987816e-03, 1.79265748443347114e-03, 1.87326924376356815e-03, 1.95682267059707486e-03, 2.04339964474220603e-03, 2.13308357045405724e-03, 2.22595938781364964e-03, 2.32211358389577434e-03, 2.42163420372099103e-03, 2.52461086098716487e-03, 2.63113474857595596e-03, 2.74129864882970689e-03, 2.85519694359420625e-03, 2.97292562402283943e-03, 3.09458230013767232e-03, 3.22026621014304882e-03, 3.35007822948731958e-03, 3.48412087966835668e-03, 3.62249833677854737e-03, 3.76531643978499918e-03, 3.91268269854072927e-03, 4.06470630152265196e-03, 4.22149812329222076e-03, 4.38317073167462433e-03, 4.54983839465248011e-03, 4.72161708697001432e-03, 4.89862449644376304e-03, 5.08098002997587627e-03, 5.26880481926615450e-03, 5.46222172621899627e-03, 5.66135534804148479e-03, 5.86633202202889247e-03, 6.07727983003393346e-03, 6.29432860261614680e-03, 6.51760992286784607e-03, 6.74725712991312531e-03, 6.98340532207646614e-03, 7.22619135971754667e-03, 7.47575386772890949e-03, 7.73223323769320330e-03, 7.99577162969677124e-03, 8.26651297379641791e-03, 8.54460297113624674e-03, 8.83018909471152040e-03, 9.12342058977655796e-03, 9.42444847389374492e-03, 9.73342553662079490e-03, 1.00505063388334658e-02, 1.03758472116809974e-02, 1.07096062551716016e-02, 1.10519433363854053e-02, 1.14030200873123075e-02, 1.17629999023122844e-02, 1.21320479351957405e-02, 1.25103310959215748e-02, 1.28980180469106979e-02, 1.32952791989728076e-02, 1.37022867068443003e-02, 1.41192144643352658e-02, 1.45462380990835864e-02, 1.49835349669142313e-02, 1.54312841458019118e-02, 1.58896664294353358e-02, 1.63588643203813722e-02, 1.68390620228475140e-02, 1.73304454350410990e-02, 1.78332021411238266e-02, 1.83475214027601831e-02, 1.88735941502584641e-02, 1.94116129733031607e-02, 1.99617721112775524e-02, 2.05242674431754276e-02, 2.10992964771009320e-02, 2.16870583393556213e-02, 2.22877537631118758e-02, 2.29015850766719136e-02, 2.35287561913117168e-02, 2.41694725887092683e-02, 2.48239413079565744e-02, 2.54923709321550309e-02, 2.61749715745937709e-02, 2.68719548645107130e-02, 2.75835339324361129e-02, 2.83099233951184983e-02, 2.90513393400329559e-02, 2.98079993094718144e-02, 3.05801222842178564e-02, 3.13679286668002702e-02, 3.21716402643336377e-02, 3.29914802709403381e-02, 3.38276732497568287e-02, 3.46804451145243478e-02, 3.55500231107646715e-02, 3.64366357965416338e-02, 3.73405130228092093e-02, 3.82618859133470380e-02, 3.92009868442843559e-02, 4.01580494232133815e-02, 4.11333084678932883e-02, 4.21269999845459813e-02, 4.31393611457449778e-02, 4.41706302678987755e-02, 4.52210467883301774e-02, 4.62908512419531258e-02, 4.73802852375486808e-02, 4.84895914336418630e-02, 4.96190135139811657e-02, 5.07687961626226211e-02, 5.19391850386203939e-02, 5.31304267503259537e-02, 5.43427688292979654e-02, 5.55764597038251167e-02, 5.68317486720641852e-02, 5.81088858747957319e-02, 5.94081222677998881e-02, 6.07297095938547858e-02, 6.20739003543602640e-02, 6.34409477805895649e-02, 6.48311058045718134e-02, 6.62446290296081582e-02, 6.76817727004245297e-02, 6.91427926729640526e-02, 7.06279453838222306e-02, 7.21374878193281005e-02, 7.36716774842746316e-02, 7.52307723703017264e-02, 7.68150309239352568e-02, 7.84247120142856471e-02, 8.00600749004095954e-02, 8.17213791983385981e-02, 8.34088848477780249e-02, 8.51228520784805614e-02, 8.68635413762979174e-02, 8.86312134489147727e-02, 9.04261291912690056e-02, 9.22485496506623253e-02, 9.40987359915655034e-02, 9.59769494601224709e-02, 9.78834513483576219e-02, 9.98185029580907354e-02, 1.01782365564564000e-01, 1.03775300379785692e-01, 1.05797568515595141e-01, 1.07849430946453665e-01, 1.09931148471966241e-01, 1.12042981679138754e-01, 1.14185190904375704e-01, 1.16358036195223350e-01, 1.18561777271863314e-01, 1.20796673488361752e-01, 1.23062983793679239e-01, 1.25360966692446605e-01, 1.27690880205512001e-01, 1.30052981830264554e-01, 1.32447528500740016e-01, 1.34874776547513880e-01, 1.37334981657387497e-01, 1.39828398832872790e-01, 1.42355282351481202e-01, 1.44915885724822592e-01, 1.47510461657519852e-01, 1.50139262005945039e-01, 1.52802537736782921e-01, 1.55500538885427849e-01, 1.58233514514219938e-01, 1.61001712670526593e-01, 1.63805380344675457e-01, 1.66644763427744918e-01, 1.69520106669218357e-01, 1.72431653634508364e-01, 1.75379646662357203e-01, 1.78364326822119846e-01, 1.81385933870935951e-01, 1.84444706210797189e-01, 1.87540880845516377e-01, 1.90674693337604925e-01, 1.93846377765065124e-01, 1.97056166678103858e-01, 2.00304291055774364e-01, 2.03590980262552687e-01, 2.06916462004855529e-01, 2.10280962287506225e-01, 2.13684705370155593e-01, 2.17127913723664474e-01, 2.20610807986454782e-01, 2.24133606920835925e-01, 2.27696527369313494e-01, 2.31299784210887128e-01, 2.34943590317344518e-01, 2.38628156509558519e-01, 2.42353691513794367e-01, 2.46120401918034032e-01, 2.49928492128324752e-01, 2.53778164325158826e-01, 2.57669618419891750e-01, 2.61603052011205807e-01, 2.65578660341626260e-01, 2.69596636254097262e-01, 2.73657170148624692e-01, 2.77760449938993052e-01, 2.81906661009563653e-01, 2.86095986172161276e-01, 2.90328605623056540e-01, 2.94604696900051189e-01, 2.98924434839673556e-01, 3.03287991534491423e-01, 3.07695536290549562e-01, 3.12147235584939176e-01, 3.16643253023506535e-01, 3.21183749298708054e-01, 3.25768882147619076e-01, 3.30398806310103640e-01, 3.35073673487152486e-01, 3.39793632299396571e-01, 3.44558828245803348e-01, 3.49369403662563068e-01, 3.54225497682172357e-01, 3.59127246192722300e-01, 3.64074781797398286e-01, 3.69068233774198815e-01, 3.74107728035880504e-01, 3.79193387090136473e-01, 3.84325330000015320e-01, 3.89503672344587845e-01, 3.94728526179868684e-01, 4.00000000000000000e-01, 4.05318198698704347e-01, 4.10683223531013818e-01, 4.16095172075282548e-01, 4.21554138195489651e-01, 4.27060212003839602e-01, 4.32613479823667109e-01, 4.38214024152653428e-01, 4.43861923626361110e-01, 4.49557252982094095e-01, 4.55300083023090055e-01, 4.61090480583051866e-01, 4.66928508491025048e-01, 4.72814225536627961e-01, 4.78747686435641562e-01, 4.84728941795965419e-01, 4.90758038083946723e-01, 4.96835017591088920e-01, 5.02959918401146618e-01, 5.09132774357613327e-01, 5.15353615031608582e-01, 5.21622465690170951e-01, 5.27939347264963366e-01, 5.34304276321397201e-01, 5.40717265028181450e-01, 5.47178321127303314e-01, 5.53687447904446478e-01, 5.60244644159853278e-01, 5.66849904179636929e-01, 5.73503217707549927e-01, 5.80204569917214681e-01, 5.86953941384822382e-01, 5.93751308062306059e-01, 6.00596641250993709e-01, 6.07489907575747342e-01, 6.14431068959593717e-01, 6.21420082598852476e-01, 6.28456900938767342e-01, 6.35541471649645973e-01, 6.42673737603513990e-01, 6.49853636851288659e-01, 6.57081102600477623e-01, 6.64356063193408012e-01, 6.71678442085991207e-01, 6.79048157827028451e-01, 6.86465124038062441e-01, 6.93929249393779953e-01, 7.01440437602970497e-01, 7.08998587390045910e-01, 7.16603592477125737e-01, 7.24255341566693156e-01, 7.31953718324826157e-01, 7.39698601365008583e-01, 7.47489864232525564e-01, 7.55327375389447831e-01, 7.63210998200209270e-01, 7.71140590917782031e-01, 7.79116006670453418e-01, 7.87137093449208694e-01, 7.95203694095723871e-01, 8.03315646290972450e-01, 8.11472782544450020e-01, 8.19674930184020513e-01, 8.27921911346387833e-01, 8.36213542968196523e-01, 8.44549636777764979e-01, 8.52929999287454716e-01, 8.61354431786679025e-01, 8.69822730335554331e-01, 8.78334685759197425e-01, 8.86890083642671696e-01, 8.95488704326585356e-01, 9.04130322903344593e-01, 9.12814709214064469e-01, 9.21541627846140309e-01, 9.30310838131482212e-01, 9.39122094145415235e-01, 9.47975144706247705e-01, 9.56869733375510003e-01, 9.65805598458866090e-01, 9.74782473007699937e-01, 9.83800084821378915e-01, 9.92858156450196122e-01, 1.00195640519899351e+00, 1.01109454313146758e+00, 1.02027227707515934e+00, 1.02948930862713003e+00, 1.03874533416032418e+00, 1.04804004483062129e+00, 1.05737312658457747e+00, 1.06674426016785807e+00, 1.07615312113436260e+00, 1.08559937985604268e+00, 1.09508270153341397e+00, 1.10460274620676285e+00, 1.11415916876804851e+00, 1.12375161897350093e+00, 1.13337974145691528e+00, 1.14304317574364305e+00, 1.15274155626528013e+00, 1.16247451237505197e+00, 1.17224166836389594e+00, 1.18204264347724066e+00, 1.19187705193248225e+00, 1.20174450293715718e+00, 1.21164460070781123e+00, 1.22157694448956428e+00, 1.23154112857637005e+00, 1.24153674233197033e+00, 1.25156337021154272e+00, 1.26162059178404107e+00, 1.27170798175522745e+00, 1.28182510999139472e+00, 1.29197154154377828e+00, 1.30214683667365573e+00, 1.31235055087813301e+00, 1.32258223491661542e+00, 1.33284143483796187e+00, 1.34312769200832060e+00, 1.35344054313964451e+00, 1.36377952031888409e+00, 1.37414415103785585e+00, 1.38453395822378415e+00, 1.39494846027051401e+00, 1.40538717107039257e+00, 1.41584960004681677e+00, 1.42633525218744441e+00, 1.43684362807806615e+00, 1.44737422393713547e+00, 1.45792653165095362e+00, 1.46850003880950679e+00, 1.47909422874295200e+00, 1.48970858055874884e+00, 1.50034256917943348e+00, 1.51099566538103163e+00, 1.52166733583210685e+00, 1.53235704313344062e+00, 1.54306424585834048e+00, 1.55378839859357216e+00, 1.56452895198091215e+00, 1.57528535275931623e+00, 1.58605704380770024e+00, 1.59684346418832852e+00, 1.60764404919080586e+00, 1.61845823037666847e+00, 1.62928543562456950e+00, 1.64012508917605436e+00, 1.65097661168192125e+00, 1.66183942024916197e+00, 1.67271292848847821e+00, 1.68359654656236818e+00, 1.69448968123377859e+00, 1.70539173591531673e+00, 1.71630211071901741e+00, 1.72722020250665925e+00, 1.73814540494062507e+00, 1.74907710853530065e+00, 1.76001470070900619e+00, 1.77095756583645494e+00, 1.78190508530173294e+00, 1.79285663755179407e+00, 1.80381159815046446e+00, 1.81476933983294999e+00, 1.82572923256084099e+00, 1.83669064357760762e+00, 1.84765293746457973e+00, 1.85861547619740481e+00, 1.86957761920297741e+00, 1.88053872341683359e+00, 1.89149814334100358e+00, 1.90245523110231615e+00, 1.91340933651114757e+00, 1.92435980712060855e+00, 1.93530598828616201e+00, 1.94624722322566473e+00, 1.95718285307982570e+00, 1.96811221697307408e+00, 1.97903465207482935e+00, 1.98994949366116653e+00, 2.00085607517686885e+00, 2.01175372829786057e+00, 2.02264178299401233e+00, 2.03351956759231144e+00, 2.04438640884038946e+00, 2.05524163197039929e+00, 2.06608456076323409e+00, 2.07691451761307995e+00, 2.08773082359229470e+00, 2.09853279851660457e+00, 2.10931976101061085e+00, 2.12009102857359848e+00, 2.13084591764563819e+00, 2.14158374367397432e+00, 2.15230382117968974e+00, 2.16300546382463975e+00, 2.17368798447864654e+00, 2.18435069528694583e+00, 2.19499290773787708e+00, 2.20561393273080900e+00, 2.21621308064429159e+00, 2.22678966140442618e+00, 2.23734298455344489e+00, 2.24787235931849070e+00, 2.25837709468058944e+00, 2.26885649944380499e+00, 2.27930988230456881e+00, 2.28973655192117491e+00, 2.30013581698343152e+00, 2.31050698628246040e+00, 2.32084936878063486e+00, 2.33116227368164756e+00, 2.34144501050069906e+00, 2.35169688913479798e+00, 2.36191721993316382e+00, 2.37210531376772327e+00, 2.38226048210369084e+00, 2.39238203707022479e+00, 2.40246929153114901e+00, 2.41252155915573179e+00, 2.42253815448951223e+00, 2.43251839302516498e+00, 2.44246159127339412e+00, 2.45236706683384695e+00, 2.46223413846603828e+00, 2.47206212616027605e+00, 2.48185035120857891e+00, 2.49159813627557638e+00, 2.50130480546938238e+00, 2.51096968441243275e+00, 2.52059210031227734e+00, 2.53017138203231742e+00, 2.53970686016247901e+00, 2.54919786708981278e+00, 2.55864373706901118e+00, 2.56804380629283344e+00, 2.57739741296242902e+00, 2.58670389735755036e+00, 2.59596260190664529e+00, 2.60517287125682003e+00, 2.61433405234366337e+00, 2.62344549446092254e+00, 2.63250654933002180e+00, 2.64151657116941410e+00, 2.65047491676375678e+00, 2.65938094553290196e+00, 2.66823401960069225e+00, 2.67703350386355282e+00, 2.68577876605887028e+00, 2.69446917683314951e+00, 2.70310410980993895e+00, 2.71168294165751549e+00, 2.72020505215631962e+00, 2.72866982426613185e+00, 2.73707664419298134e+00, 2.74542490145577759e+00, 2.75371398895265633e+00, 2.76194330302703054e+00, 2.77011224353333762e+00, 2.77822021390247392e+00, 2.78626662120690767e+00, 2.79425087622546143e+00, 2.80217239350775542e+00, 2.81003059143830278e+00, 2.81782489230024820e+00, 2.82555472233874110e+00, 2.83321951182393492e+00, 2.84081869511360370e+00, 2.84835171071536763e+00, 2.85581800134851890e+00, 2.86321701400543958e+00, 2.87054820001260295e+00, 2.87781101509115013e+00, 2.88500491941703356e+00, 2.89212937768071919e+00, 2.89918385914643925e+00, 2.90616783771098731e+00, 2.91308079196204776e+00, 2.91992220523605156e+00, 2.92669156567555045e+00, 2.93338836628610160e+00, 2.94001210499265506e+00, 2.94656228469543601e+00, 2.95303841332531444e+00, 2.95944000389865433e+00, 2.96576657457163502e+00, 2.97201764869403716e+00, 2.97819275486248579e+00, 2.98429142697314345e+00, 2.99031320427384566e+00, 2.99625763141567200e+00, 3.00212425850394532e+00, 3.00791264114865230e+00, 3.01362234051427815e+00, 3.01925292336904886e+00, 3.02480396213357383e+00, 3.03027503492888252e+00, 3.03566572562384817e+00, 3.04097562388199221e+00, 3.04620432520766281e+00, 3.05135143099158118e+00, 3.05641654855574929e+00, 3.06139929119771284e+00, 3.06629927823417327e+00, 3.07111613504394281e+00, 3.07584949311023659e+00, 3.08049899006229595e+00, 3.08506426971633713e+00, 3.08954498211581974e+00, 3.09394078357102928e+00, 3.09825133669796836e+00, 3.10247631045655109e+00, 3.10661538018809540e+00, 3.11066822765210803e+00, 3.11463454106235709e+00, 3.11851401512222723e+00, 3.12230635105935233e+00, 3.12601125665952111e+00, 3.12962844629985072e+00, 3.13315764098122386e+00, 3.13659856835998480e+00, 3.13995096277888995e+00, 3.14321456529730863e+00, 3.14638912372066978e+00, 3.14947439262915065e+00, 3.15247013340560327e+00, 3.15537611426271503e+00, 3.15819211026939931e+00, 3.16091790337641274e+00, 3.16355328244119536e+00, 3.16609804325193021e+00, 3.16855198855081905e+00, 3.17091492805657098e+00, 3.17318667848610070e+00, 3.17536706357543346e+00, 3.17745591409981383e+00, 3.17945306789301538e+00, 3.18135836986584855e+00, 3.18317167202386431e+00, 3.18489283348425087e+00, 3.18652172049192133e+00, 3.18805820643478979e+00, 3.18950217185823401e+00, 3.19085350447874238e+00, 3.19211209919674349e+00, 3.19327785810861630e+00, 3.19435069051787945e+00, 3.19533051294555793e+00, 3.19621724913972586e+00, 3.19701083008422384e+00, 3.19771119400654986e+00, 3.19831828638492250e+00, 3.19883205995451546e+00, 3.19925247471286270e+00, 3.19957949792443317e+00, 3.19981310412437472e+00, 3.19995327512142660e+00, 3.20000000000000000e+00, 3.19995327512142660e+00, 3.19981310412437472e+00, 3.19957949792443317e+00, 3.19925247471286270e+00, 3.19883205995451546e+00, 3.19831828638492250e+00, 3.19771119400654986e+00, 3.19701083008422384e+00, 3.19621724913972586e+00, 3.19533051294555793e+00, 3.19435069051787945e+00, 3.19327785810861630e+00, 3.19211209919674349e+00, 3.19085350447874238e+00, 3.18950217185823401e+00, 3.18805820643478979e+00, 3.18652172049192133e+00, 3.18489283348425087e+00, 3.18317167202386431e+00, 3.18135836986584855e+00, 3.17945306789301538e+00, 3.17745591409981383e+00, 3.17536706357543346e+00, 3.17318667848610070e+00, 3.17091492805657098e+00, 3.16855198855081905e+00, 3.16609804325193021e+00, 3.16355328244119536e+00, 3.16091790337641274e+00, 3.15819211026939931e+00, 3.15537611426271503e+00, 3.15247013340560327e+00, 3.14947439262915065e+00, 3.14638912372066978e+00, 3.14321456529730863e+00, 3.13995096277888995e+00, 3.13659856835998480e+00, 3.13315764098122386e+00, 3.12962844629985072e+00, 3.12601125665952111e+00, 3.12230635105935233e+00, 3.11851401512222723e+00, 3.11463454106235709e+00, 3.11066822765210803e+00, 3.10661538018809540e+00, 3.10247631045655109e+00, 3.09825133669796836e+00, 3.09394078357102928e+00, 3.08954498211581974e+00, 3.08506426971633713e+00, 3.08049899006229595e+00, 3.07584949311023659e+00, 3.07111613504394281e+00, 3.06629927823417327e+00, 3.06139929119771284e+00, 3.05641654855574929e+00, 3.05135143099158118e+00, 3.04620432520766281e+00, 3.04097562388199221e+00, 3.03566572562384817e+00, 3.03027503492888252e+00, 3.02480396213357383e+00, 3.01925292336904886e+00, 3.01362234051427815e+00, 3.00791264114865230e+00, 3.00212425850394532e+00, 2.99625763141567200e+00, 2.99031320427384566e+00, 2.98429142697314345e+00, 2.97819275486248579e+00, 2.97201764869403716e+00, 2.96576657457163502e+00, 2.95944000389865433e+00, 2.95303841332531444e+00, 2.94656228469543601e+00, 2.94001210499265506e+00, 2.93338836628610160e+00, 2.92669156567555045e+00, 2.91992220523605156e+00, 2.91308079196204776e+00, 2.90616783771098731e+00, 2.89918385914643925e+00, 2.89212937768071919e+00, 2.88500491941703356e+00, 2.87781101509115013e+00, 2.87054820001260295e+00, 2.86321701400543958e+00, 2.85581800134851890e+00, 2.84835171071536763e+00, 2.84081869511360370e+00, 2.83321951182393492e+00, 2.82555472233874110e+00, 2.81782489230024820e+00, 2.81003059143830278e+00, 2.80217239350775542e+00, 2.79425087622546143e+00, 2.78626662120690767e+00, 2.77822021390247392e+00, 2.77011224353333762e+00, 2.76194330302703054e+00, 2.75371398895265633e+00, 2.74542490145577759e+00, 2.73707664419298134e+00, 2.72866982426613185e+00, 2.72020505215631962e+00, 2.71168294165751549e+00, 2.70310410980993895e+00, 2.69446917683314951e+00, 2.68577876605887028e+00, 2.67703350386355282e+00, 2.66823401960069225e+00, 2.65938094553290196e+00, 2.65047491676375678e+00, 2.64151657116941410e+00, 2.63250654933002180e+00, 2.62344549446092254e+00, 2.61433405234366337e+00, 2.60517287125682003e+00, 2.59596260190664529e+00, 2.58670389735755036e+00, 2.57739741296242902e+00, 2.56804380629283344e+00, 2.55864373706901118e+00, 2.54919786708981278e+00, 2.53970686016247901e+00, 2.53017138203231742e+00, 2.52059210031227734e+00, 2.51096968441243275e+00, 2.50130480546938238e+00, 2.49159813627557638e+00, 2.48185035120857891e+00, 2.47206212616027605e+00, 2.46223413846603828e+00, 2.45236706683384695e+00, 2.44246159127339412e+00, 2.43251839302516498e+00, 2.42253815448951223e+00, 2.41252155915573179e+00, 2.40246929153114901e+00, 2.39238203707022479e+00, 2.38226048210369084e+00, 2.37210531376772327e+00, 2.36191721993316382e+00, 2.35169688913479798e+00, 2.34144501050069906e+00, 2.33116227368164756e+00, 2.32084936878063486e+00, 2.31050698628246040e+00, 2.30013581698343152e+00, 2.28973655192117491e+00, 2.27930988230456881e+00, 2.26885649944380499e+00, 2.25837709468058944e+00, 2.24787235931849070e+00, 2.23734298455344489e+00, 2.22678966140442618e+00, 2.21621308064429159e+00, 2.20561393273080900e+00, 2.19499290773787708e+00, 2.18435069528694583e+00, 2.17368798447864654e+00, 2.16300546382463975e+00, 2.15230382117968974e+00, 2.14158374367397432e+00, 2.13084591764563819e+00, 2.12009102857359848e+00, 2.10931976101061085e+00, 2.09853279851660457e+00, 2.08773082359229470e+00, 2.07691451761307995e+00, 2.06608456076323409e+00, 2.05524163197039929e+00, 2.04438640884038946e+00, 2.03351956759231144e+00, 2.02264178299401233e+00, 2.01175372829786057e+00, 2.00085607517686885e+00, 1.98994949366116653e+00, 1.97903465207482935e+00, 1.96811221697307408e+00, 1.95718285307982570e+00, 1.94624722322566473e+00, 1.93530598828616201e+00, 1.92435980712060855e+00, 1.91340933651114757e+00, 1.90245523110231615e+00, 1.89149814334100358e+00, 1.88053872341683359e+00, 1.86957761920297741e+00, 1.85861547619740481e+00, 1.84765293746457973e+00, 1.83669064357760762e+00, 1.82572923256084099e+00, 1.81476933983294999e+00, 1.80381159815046446e+00, 1.79285663755179407e+00, 1.78190508530173294e+00, 1.77095756583645494e+00, 1.76001470070900619e+00, 1.74907710853530065e+00, 1.73814540494062507e+00, 1.72722020250665925e+00, 1.71630211071901741e+00, 1.70539173591531673e+00, 1.69448968123377859e+00, 1.68359654656236818e+00, 1.67271292848847821e+00, 1.66183942024916197e+00, 1.65097661168192125e+00, 1.64012508917605436e+00, 1.62928543562456950e+00, 1.61845823037666847e+00, 1.60764404919080586e+00, 1.59684346418832852e+00, 1.58605704380770024e+00, 1.57528535275931623e+00, 1.56452895198091215e+00, 1.55378839859357216e+00, 1.54306424585834048e+00, 1.53235704313344062e+00, 1.52166733583210685e+00, 1.51099566538103163e+00, 1.50034256917943348e+00, 1.48970858055874884e+00, 1.47909422874295200e+00, 1.46850003880950679e+00, 1.45792653165095362e+00, 1.44737422393713547e+00, 1.43684362807806615e+00, 1.42633525218744441e+00, 1.41584960004681677e+00, 1.40538717107039257e+00, 1.39494846027051401e+00, 1.38453395822378415e+00, 1.37414415103785585e+00, 1.36377952031888409e+00, 1.35344054313964451e+00, 1.34312769200832060e+00, 1.33284143483796187e+00, 1.32258223491661542e+00, 1.31235055087813301e+00, 1.30214683667365573e+00, 1.29197154154377828e+00, 1.28182510999139472e+00, 1.27170798175522745e+00, 1.26162059178404107e+00, 1.25156337021154272e+00, 1.24153674233197033e+00, 1.23154112857637005e+00, 1.22157694448956428e+00, 1.21164460070781123e+00, 1.20174450293715718e+00, 1.19187705193248225e+00, 1.18204264347724066e+00, 1.17224166836389594e+00, 1.16247451237505197e+00, 1.15274155626528013e+00, 1.14304317574364305e+00, 1.13337974145691528e+00, 1.12375161897350093e+00, 1.11415916876804851e+00, 1.10460274620676285e+00, 1.09508270153341397e+00, 1.08559937985604268e+00, 1.07615312113436260e+00, 1.06674426016785807e+00, 1.05737312658457747e+00, 1.04804004483062129e+00, 1.03874533416032418e+00, 1.02948930862713003e+00, 1.02027227707515934e+00, 1.01109454313146758e+00, 1.00195640519899351e+00, 9.92858156450196122e-01, 9.83800084821378915e-01, 9.74782473007699937e-01, 9.65805598458866090e-01, 9.56869733375510003e-01, 9.47975144706247705e-01, 9.39122094145415235e-01, 9.30310838131482212e-01, 9.21541627846140309e-01, 9.12814709214064469e-01, 9.04130322903344593e-01, 8.95488704326585356e-01, 8.86890083642671696e-01, 8.78334685759197425e-01, 8.69822730335554331e-01, 8.61354431786679025e-01, 8.52929999287454716e-01, 8.44549636777764979e-01, 8.36213542968196523e-01, 8.27921911346387833e-01, 8.19674930184020513e-01, 8.11472782544450020e-01, 8.03315646290972450e-01, 7.95203694095723871e-01, 7.87137093449208694e-01, 7.79116006670453418e-01, 7.71140590917782031e-01, 7.63210998200209270e-01, 7.55327375389447831e-01, 7.47489864232525564e-01, 7.39698601365008583e-01, 7.31953718324826157e-01, 7.24255341566693156e-01, 7.16603592477125737e-01, 7.08998587390045910e-01, 7.01440437602970497e-01, 6.93929249393779953e-01, 6.86465124038062441e-01, 6.79048157827028451e-01, 6.71678442085991207e-01, 6.64356063193408012e-01, 6.57081102600477623e-01, 6.49853636851288659e-01, 6.42673737603513990e-01, 6.35541471649645973e-01, 6.28456900938767342e-01, 6.21420082598852476e-01, 6.14431068959593717e-01, 6.07489907575747342e-01, 6.00596641250993709e-01, 5.93751308062306059e-01, 5.86953941384822382e-01, 5.80204569917214681e-01, 5.73503217707549927e-01, 5.66849904179636929e-01, 5.60244644159853278e-01, 5.53687447904446478e-01, 5.47178321127303314e-01, 5.40717265028181450e-01, 5.34304276321397201e-01, 5.27939347264963366e-01, 5.21622465690170951e-01, 5.15353615031608582e-01, 5.09132774357613327e-01, 5.02959918401146618e-01, 4.96835017591088920e-01, 4.90758038083946723e-01, 4.84728941795965419e-01, 4.78747686435641562e-01, 4.72814225536627961e-01, 4.66928508491025048e-01, 4.61090480583051866e-01, 4.55300083023090055e-01, 4.49557252982094095e-01, 4.43861923626361110e-01, 4.38214024152653428e-01, 4.32613479823667109e-01, 4.27060212003839602e-01, 4.21554138195489651e-01, 4.16095172075282548e-01, 4.10683223531013818e-01, 4.05318198698704347e-01, 4.00000000000000000e-01, 3.94728526179868684e-01, 3.89503672344587845e-01, 3.84325330000015320e-01, 3.79193387090136473e-01, 3.74107728035880504e-01, 3.69068233774198815e-01, 3.64074781797398286e-01, 3.59127246192722300e-01, 3.54225497682172357e-01, 3.49369403662563068e-01, 3.44558828245803348e-01, 3.39793632299396571e-01, 3.35073673487152486e-01, 3.30398806310103640e-01, 3.25768882147619076e-01, 3.21183749298708054e-01, 3.16643253023506535e-01, 3.12147235584939176e-01, 3.07695536290549562e-01, 3.03287991534491423e-01, 2.98924434839673556e-01, 2.94604696900051189e-01, 2.90328605623056540e-01, 2.86095986172161276e-01, 2.81906661009563653e-01, 2.77760449938993052e-01, 2.73657170148624692e-01, 2.69596636254097262e-01, 2.65578660341626260e-01, 2.61603052011205807e-01, 2.57669618419891750e-01, 2.53778164325158826e-01, 2.49928492128324752e-01, 2.46120401918034032e-01, 2.42353691513794367e-01, 2.38628156509558519e-01, 2.34943590317344518e-01, 2.31299784210887128e-01, 2.27696527369313494e-01, 2.24133606920835925e-01, 2.20610807986454782e-01, 2.17127913723664474e-01, 2.13684705370155593e-01, 2.10280962287506225e-01, 2.06916462004855529e-01, 2.03590980262552687e-01, 2.00304291055774364e-01, 1.97056166678103858e-01, 1.93846377765065124e-01, 1.90674693337604925e-01, 1.87540880845516377e-01, 1.84444706210797189e-01, 1.81385933870935951e-01, 1.78364326822119846e-01, 1.75379646662357203e-01, 1.72431653634508364e-01, 1.69520106669218357e-01, 1.66644763427744918e-01, 1.63805380344675457e-01, 1.61001712670526593e-01, 1.58233514514219938e-01, 1.55500538885427849e-01, 1.52802537736782921e-01, 1.50139262005945039e-01, 1.47510461657519852e-01, 1.44915885724822592e-01, 1.42355282351481202e-01, 1.39828398832872790e-01, 1.37334981657387497e-01, 1.34874776547513880e-01, 1.32447528500740016e-01, 1.30052981830264554e-01, 1.27690880205512001e-01, 1.25360966692446605e-01, 1.23062983793679239e-01, 1.20796673488361752e-01, 1.18561777271863314e-01, 1.16358036195223350e-01, 1.14185190904375704e-01, 1.12042981679138754e-01, 1.09931148471966241e-01, 1.07849430946453665e-01, 1.05797568515595141e-01, 1.03775300379785692e-01, 1.01782365564564000e-01, 9.98185029580907354e-02, 9.78834513483576219e-02, 9.59769494601224709e-02, 9.40987359915655034e-02, 9.22485496506623253e-02, 9.04261291912690056e-02, 8.86312134489147727e-02, 8.68635413762979174e-02, 8.51228520784805614e-02, 8.34088848477780249e-02, 8.17213791983385981e-02, 8.00600749004095954e-02, 7.84247120142856471e-02, 7.68150309239352568e-02, 7.52307723703017264e-02, 7.36716774842746316e-02, 7.21374878193281005e-02, 7.06279453838222306e-02, 6.91427926729640526e-02, 6.76817727004245297e-02, 6.62446290296081582e-02, 6.48311058045718134e-02, 6.34409477805895649e-02, 6.20739003543602640e-02, 6.07297095938547858e-02, 5.94081222677998881e-02, 5.81088858747957319e-02, 5.68317486720641852e-02, 5.55764597038251167e-02, 5.43427688292979654e-02, 5.31304267503259537e-02, 5.19391850386203939e-02, 5.07687961626226211e-02, 4.96190135139811657e-02, 4.84895914336418630e-02, 4.73802852375486808e-02, 4.62908512419531258e-02, 4.52210467883301774e-02, 4.41706302678987755e-02, 4.31393611457449778e-02, 4.21269999845459813e-02, 4.11333084678932883e-02, 4.01580494232133815e-02, 3.92009868442843559e-02, 3.82618859133470380e-02, 3.73405130228092093e-02, 3.64366357965416338e-02, 3.55500231107646715e-02, 3.46804451145243478e-02, 3.38276732497568287e-02, 3.29914802709403381e-02, 3.21716402643336377e-02, 3.13679286668002702e-02, 3.05801222842178564e-02, 2.98079993094718144e-02, 2.90513393400329559e-02, 2.83099233951184983e-02, 2.75835339324361129e-02, 2.68719548645107130e-02, 2.61749715745937709e-02, 2.54923709321550309e-02, 2.48239413079565744e-02, 2.41694725887092683e-02, 2.35287561913117168e-02, 2.29015850766719136e-02, 2.22877537631118758e-02, 2.16870583393556213e-02, 2.10992964771009320e-02, 2.05242674431754276e-02, 1.99617721112775524e-02, 1.94116129733031607e-02, 1.88735941502584641e-02, 1.83475214027601831e-02, 1.78332021411238266e-02, 1.73304454350410990e-02, 1.68390620228475140e-02, 1.63588643203813722e-02, 1.58896664294353358e-02, 1.54312841458019118e-02, 1.49835349669142313e-02, 1.45462380990835864e-02, 1.41192144643352658e-02, 1.37022867068443003e-02, 1.32952791989728076e-02, 1.28980180469106979e-02, 1.25103310959215748e-02, 1.21320479351957405e-02, 1.17629999023122844e-02, 1.14030200873123075e-02, 1.10519433363854053e-02, 1.07096062551716016e-02, 1.03758472116809974e-02, 1.00505063388334658e-02, 9.73342553662079490e-03, 9.42444847389374492e-03, 9.12342058977655796e-03, 8.83018909471152040e-03, 8.54460297113624674e-03, 8.26651297379641791e-03, 7.99577162969677124e-03, 7.73223323769320330e-03, 7.47575386772890949e-03, 7.22619135971754667e-03, 6.98340532207646614e-03, 6.74725712991312531e-03, 6.51760992286784607e-03, 6.29432860261614680e-03, 6.07727983003393346e-03, 5.86633202202889247e-03, 5.66135534804148479e-03, 5.46222172621899627e-03, 5.26880481926615450e-03, 5.08098002997587627e-03, 4.89862449644376304e-03, 4.72161708697001432e-03, 4.54983839465248011e-03, 4.38317073167462433e-03, 4.22149812329222076e-03, 4.06470630152265196e-03, 3.91268269854072927e-03, 3.76531643978499918e-03, 3.62249833677854737e-03, 3.48412087966835668e-03, 3.35007822948731958e-03, 3.22026621014304882e-03, 3.09458230013767232e-03, 2.97292562402283943e-03, 2.85519694359420625e-03, 2.74129864882970689e-03, 2.63113474857595596e-03, 2.52461086098716487e-03, 2.42163420372099103e-03, 2.32211358389577434e-03, 2.22595938781364964e-03, 2.13308357045405724e-03, 2.04339964474220603e-03, 1.95682267059707486e-03, 1.87326924376356815e-03, 1.79265748443347114e-03, 1.71490702565987816e-03, 1.63993900156979466e-03, 1.56767603537963973e-03, 1.49804222721840103e-03, 1.43096314176321812e-03, 1.36636579569219284e-03, 1.30417864495924788e-03, 1.24433157189587487e-03, 1.18675587214463373e-03, 1.13138424142928326e-03, 1.07815076216644088e-03, 1.02699088992368604e-03, 9.77841439729037039e-04, 9.30640572236745823e-04, 8.85327779754368423e-04, 8.41843872136081038e-04, 8.00130962547223052e-04, 7.60132453105058308e-04, 7.21793020400755071e-04, 6.85058600907593034e-04, 6.49876376280412640e-04, 6.16194758551327770e-04, 5.83963375226727598e-04, 5.53133054290597009e-04, 5.23655809119187603e-04, 4.95484823312072716e-04, 4.68574435444620360e-04, 4.42880123746917248e-04, 4.18358490714175374e-04, 3.94967247653649748e-04, 3.72665199173092016e-04, 3.51412227615759705e-04, 3.31169277446994815e-04, 3.11898339597378356e-04, 2.93562435767459274e-04, 2.76125602699046955e-04, 2.59552876418046254e-04, 2.43810276453802595e-04, 2.28864790039912336e-04, 2.14684356301440128e-04, 2.01237850433470520e-04, 1.88495067875905520e-04, 1.76426708489403275e-04, 1.65004360737335414e-04, 1.54200485878621995e-04, 1.43988402176283337e-04, 1.34342269126527354e-04, 1.25237071713169329e-04, 1.16648604692158390e-04, 1.08553456910961249e-04, 1.00928995667529091e-04, 9.37533511135478192e-05, 8.70054007066452145e-05, 8.06647537162009095e-05, 7.47117357873764980e-05, 6.91273735679535015e-05, 6.38933794025363972e-05, 5.89921360986464216e-05, 5.44066817691994417e-05, 5.01206947558278155e-05, 4.61184786374718751e-05, 4.23849473286314457e-05, 3.89056102716316880e-05, 3.56665577272205129e-05, 3.26544461677768870e-05, 2.98564837773705240e-05, 2.72604160628737521e-05, 2.48545115802857764e-05, 2.26275477803881128e-05, 2.05687969778076780e-05, 1.86680124475208848e-05, 1.69154146527881135e-05, 1.53016776084631346e-05, 1.38179153835764398e-05, 1.24556687470450130e-05, 1.12068919603138562e-05, 1.00639397206865749e-05, 9.01955425905354564e-06, 8.06685259567663848e-06, 7.19931395763916027e-06, 6.41076736151863585e-06, 5.69537936478825866e-06, 5.04764198940033469e-06, 4.46236082095182397e-06, 3.93464328677816254e-06, 3.45988711626693812e-06, 3.03376898662770350e-06, 2.65223335729825746e-06, 2.31148149611111296e-06, 2.00796070028662000e-06, 1.73835371526132706e-06, 1.49956835430166281e-06, 1.28872732179391101e-06, 1.10315824304174810e-06, 9.40383903342328240e-07, 7.98112699051046140e-07, 6.74229303283696796e-07, 5.66785548842796589e-07, 4.73991530892343932e-07, 3.94206931842293587e-07, 3.25932570840509480e-07, 2.67802180205959653e-07, 2.18574411072437080e-07, 1.77125070447144772e-07, 1.42439591823086335e-07, 1.13605741418367350e-07, 8.98065620492523309e-08, 7.03135565771500222e-08, 5.44801128026304109e-08, 4.17351716121236247e-08, 3.15771401151278980e-08, 2.35680514415748858e-08, 1.73279728004798243e-08, 1.25296633321554548e-08, 8.89348321710637371e-09, 6.18255543525875242e-09, 4.19818149943343009e-09, 2.77551241695252807e-09, 1.77947606299532627e-09, 1.10096207880257650e-09, 6.53265337084159831e-10, 3.68788946027512842e-10, 1.96007692148083204e-10, 9.66927508827969114e-11, 4.33984223177292195e-11, 1.72115777765039178e-11, 5.76443119106347665e-12, 1.51117724604519089e-12, 2.68966246778194856e-13, 2.36135236163851335e-14, 3.68966693982259570e-16 }; // All of the remaining constants are needed // when the radial transformation is invoked. // Modified Cools/Haegemans weights. static const double mod_CH_weight[7] = { 0.6002713316445080080142126, 0.7955990316249109629216728, 1.0584888443837658614605899, 0.7595383160846588054989698, 1.3523576929325600784468914, 0.9663531601396869556259704, 1.9895758469520118113052969 }; // x-coordinates for Cools/Haegemans cubature rule. static const double x_coord[36] = { 0.5460844152585403666984417e+00, 0.0, 0.0, -0.5460844152585403666984417e+00, 0.8462499884480199068814807e+00, 0.8462499884480199068814807e+00, -0.8462499884480199068814807e+00, -0.8462499884480199068814807e+00, 0.1376486679696350642323050e+01, 0.0, 0.0, -0.1376486679696350642323050e+01, 0.9318240227761998500475049e+00, 0.1779246738905319006374908e+01, 0.9318240227761998500475049e+00, 0.9318240227761998500475049e+00, -0.9318240227761998500475049e+00, -0.9318240227761998500475049e+00, -0.9318240227761998500475049e+00, -0.9318240227761998500475049e+00, 0.2358932261980680967828022e+01, 0.0, 0.0, -0.2358932261980680967828022e+01, 0.1985531339917884990890422e+01, 0.1985531339917884990890422e+01, -0.1985531339917884990890422e+01, -0.1985531339917884990890422e+01, 0.3030436065368579151664045e+01, 0.3030436065368579151664045e+01, 0.9962534261727632104611162e+00, 0.9962534261727632104611162e+00, -0.9962534261727632104611162e+00, -0.9962534261727632104611162e+00, -0.3030436065368579151664045e+01, -0.3030436065368579151664045e+01 }; // y-coordinates for Cools/Haegemans cubature rule. static const double y_coord[36] = { 0.0, 0.5460844152585403666984417e+00, -0.5460844152585403666984417e+00, 0.0, 0.8462499884480199068814807e+00, -0.8462499884480199068814807e+00, -0.8462499884480199068814807e+00, 0.8462499884480199068814807e+00, 0.0, 0.1376486679696350642323050e+01, -0.1376486679696350642323050e+01, 0.0, 0.9318240227761998500475049e+00, -0.9318240227761998500475049e+00, 0.1779246738905319006374908e+01, -0.1779246738905319006374908e+01, -0.1779246738905319006374908e+01, 0.1779246738905319006374908e+01, -0.9318240227761998500475049e+00, 0.9318240227761998500475049e+00, 0.0, 0.2358932261980680967828022e+01, -0.2358932261980680967828022e+01, 0.0, 0.1985531339917884990890422e+01, -0.1985531339917884990890422e+01, -0.1985531339917884990890422e+01, 0.1985531339917884990890422e+01, 0.9962534261727632104611162e+00, -0.9962534261727632104611162e+00, 0.3030436065368579151664045e+01, -0.3030436065368579151664045e+01, -0.3030436065368579151664045e+01, 0.3030436065368579151664045e+01, -0.9962534261727632104611162e+00, 0.9962534261727632104611162e+00 }; // Number of cubature points in each annulus used to determine // an appropriate value for r to be used in the radial transformation. static const int index_end[7] = {4, 8, 12, 20, 24, 28, 36}; // Radii of the annuli referred to above. static const double radius[7] = { 0.9151577658134376, 1.2649388389767648, 1.7333214530567136, 2.2616892861784437, 2.6609731353556634, 2.9246248487342039, 6.0979478618219725 }; static const double p[7] = { 7.924200257650354518e-01, 4.819180439431658969e-01, 1.505600579003091299e-01, -4.429419084983700628e-01, 1.994215438751057324e-03, -2.117593190202882864e-02, -1.928822795187392779e-04 }; static const double q[7] = { 5.672147949626513696e-01, 1.523140070359789711e-01, 5.163427535780167575e-03, 4.618057461521299367e-01, 6.482362012586172532e-04, 2.178188945437347507e-02, 1.928822795189620814e-04 }; // Values of cos(2pi*coordinate[i]), i = 0,..,POINTS-1. static const double cos2pix[POINTS] = { 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 0.999999999999999999, 0.999999999999999999, 0.999999999999999998, 0.999999999999999997, 0.999999999999999995, 0.999999999999999992, 0.999999999999999987, 0.999999999999999980, 0.999999999999999968, 0.999999999999999951, 0.999999999999999926, 0.999999999999999889, 0.999999999999999836, 0.999999999999999759, 0.999999999999999650, 0.999999999999999497, 0.999999999999999283, 0.999999999999998987, 0.999999999999998582, 0.999999999999998030, 0.999999999999997283, 0.999999999999996281, 0.999999999999994945, 0.999999999999993173, 0.999999999999990840, 0.999999999999987784, 0.999999999999983802, 0.999999999999978644, 0.999999999999971994, 0.999999999999963464, 0.999999999999952574, 0.999999999999938734, 0.999999999999921221, 0.999999999999899155, 0.999999999999871465, 0.999999999999836855, 0.999999999999793761, 0.999999999999740299, 0.999999999999674212, 0.999999999999592800, 0.999999999999492844, 0.999999999999370516, 0.999999999999221279, 0.999999999999039767, 0.999999999998819651, 0.999999999998553488, 0.999999999998232537, 0.999999999997846570, 0.999999999997383634, 0.999999999996829800, 0.999999999996168868, 0.999999999995382035, 0.999999999994447526, 0.999999999993340171, 0.999999999992030933, 0.999999999990486378, 0.999999999988668083, 0.999999999986531966, 0.999999999984027545, 0.999999999981097108, 0.999999999977674789, 0.999999999973685534, 0.999999999969043962, 0.999999999963653093, 0.999999999957402942, 0.999999999950168957, 0.999999999941810300, 0.999999999932167941, 0.999999999921062564, 0.999999999908292246, 0.999999999893629921, 0.999999999876820576, 0.999999999857578178, 0.999999999835582310, 0.999999999810474468, 0.999999999781854027, 0.999999999749273812, 0.999999999712235270, 0.999999999670183196, 0.999999999622499985, 0.999999999568499364, 0.999999999507419574, 0.999999999438415958, 0.999999999360552899, 0.999999999272795076, 0.999999999173997973, 0.999999999062897601, 0.999999998938099356, 0.999999998798065975, 0.999999998641104503, 0.999999998465352222, 0.999999998268761454, 0.999999998049083167, 0.999999997803849312, 0.999999997530353782, 0.999999997225631932, 0.999999996886438534, 0.999999996509224094, 0.999999996090109403, 0.999999995624858219, 0.999999995108847963, 0.999999994537038304, 0.999999993903937496, 0.999999993203566335, 0.999999992429419595, 0.999999991574424781, 0.999999990630898044, 0.999999989590497098, 0.999999988444170952, 0.999999987182106274, 0.999999985793670211, 0.999999984267349431, 0.999999982590685213, 0.999999980750204333, 0.999999978731345533, 0.999999976518381320, 0.999999974094334852, 0.999999971440891640, 0.999999968538305792, 0.999999965365300513, 0.999999961898962559, 0.999999958114630336, 0.999999953985775308, 0.999999949483876391, 0.999999944578286962, 0.999999939236094126, 0.999999933421969854, 0.999999927098013594, 0.999999920223585938, 0.999999912755132922, 0.999999904646000501, 0.999999895846238746, 0.999999886302395267, 0.999999875957297378, 0.999999864749822467, 0.999999852614656049, 0.999999839482036934, 0.999999825277488929, 0.999999809921538490, 0.999999793329417684, 0.999999775410751836, 0.999999756069231181, 0.999999735202265853, 0.999999712700623478, 0.999999688448048653, 0.999999662320863547, 0.999999634187548836, 0.999999603908304169, 0.999999571334587317, 0.999999536308631163, 0.999999498662937619, 0.999999458219747570, 0.999999414790485886, 0.999999368175180541, 0.999999318161854815, 0.999999264525891562, 0.999999207029368468, 0.999999145420363200, 0.999999079432227329, 0.999999008782827846, 0.999998933173755098, 0.999998852289495900, 0.999998765796570563, 0.999998673342632550, 0.999998574555529417, 0.999998469042323677, 0.999998356388272175, 0.999998236155762546, 0.999998107883205263, 0.999997971083879765, 0.999997825244733106, 0.999997669825129538, 0.999997504255549382, 0.999997327936235523, 0.999997140235785806, 0.999996940489689589, 0.999996727998806641, 0.999996502027786556, 0.999996261803426799, 0.999996006512967456, 0.999995735302320727, 0.999995447274233142, 0.999995141486378458, 0.999994816949379113, 0.999994472624754123, 0.999994107422791210, 0.999993720200340929, 0.999993309758530519, 0.999992874840395152, 0.999992414128424191, 0.999991926242020062, 0.999991409734867244, 0.999990863092208884, 0.999990284728028474, 0.999989672982133965, 0.999989026117141680, 0.999988342315357314, 0.999987619675551262, 0.999986856209625497, 0.999986049839169120, 0.999985198391899714, 0.999984299597987547, 0.999983351086259624, 0.999982350380280572, 0.999981294894307251, 0.999980181929113964, 0.999979008667685086, 0.999977772170771892, 0.999976469372310286, 0.999975097074696134, 0.999973651943914823, 0.999972130504521630, 0.999970529134469444, 0.999968844059780340, 0.999967071349057453, 0.999965206907833563, 0.999963246472752749, 0.999961185605581435, 0.999959019687045114, 0.999956743910486974, 0.999954353275344637, 0.999951842580441150, 0.999949206417086360, 0.999946439161984748, 0.999943534969945755, 0.999940487766392615, 0.999937291239665653, 0.999933938833115999, 0.999930423736985597, 0.999926738880069399, 0.999922876921155570, 0.999918830240239513, 0.999914590929507500, 0.999910150784085656, 0.999905501292550027, 0.999900633627193432, 0.999895538634044786, 0.999890206822636547, 0.999884628355515930, 0.999878793037495517, 0.999872690304638861, 0.999866309212976682, 0.999859638426949243, 0.999852666207570466, 0.999845380400309356, 0.999837768422684304, 0.999829817251565795, 0.999821513410183109, 0.999812842954830533, 0.999803791461268669, 0.999794344010816391, 0.999784485176129012, 0.999774199006658256, 0.999763469013789629, 0.999752278155652787, 0.999740608821600544, 0.999728442816352172, 0.999715761343796651, 0.999702544990451603, 0.999688773708573612, 0.999674426798915724, 0.999659482893127923, 0.999643919935796418, 0.999627715166117661, 0.999610845099202994, 0.999593285507009946, 0.999575011398896209, 0.999555997001792388, 0.999536215739989700, 0.999515640214538844, 0.999494242182256338, 0.999471992534334702, 0.999448861274552931, 0.999424817497083796, 0.999399829363894577, 0.999373864081737964, 0.999346887878729902, 0.999318865980511302, 0.999289762585990620, 0.999259540842664428, 0.999228162821513196, 0.999195589491469653, 0.999161780693457183, 0.999126695113995876, 0.999090290258373961, 0.999052522423382502, 0.999013346669611371, 0.998972716793304686, 0.998930585297774021, 0.998886903364367892, 0.998841620822996168, 0.998794686122208234, 0.998746046298823916, 0.998695646947116361, 0.998643432187546256, 0.998589344635046953, 0.998533325366860305, 0.998475313889923187, 0.998415248107804928, 0.998353064287196065, 0.998288697023949108, 0.998222079208672188, 0.998153141991876753, 0.998081814748680683, 0.998008025043068486, 0.997931698591710495, 0.997852759227343225, 0.997771128861713390, 0.997686727448088298, 0.997599472943335700, 0.997509281269576410, 0.997416066275413383, 0.997319739696741197, 0.997220211117140266, 0.997117387927860392, 0.997011175287398650, 0.996901476080676923, 0.996788190877824762, 0.996671217892573640, 0.996550452940269003, 0.996425789395506935, 0.996297118149402643, 0.996164327566498348, 0.996027303441318604, 0.995885928954581466, 0.995740084629074376, 0.995589648285204041, 0.995434494996230057, 0.995274497043192467, 0.995109523869543906, 0.994939442035497478, 0.994764115172101958, 0.994583403935056440, 0.994397165958277036, 0.994205255807228737, 0.994007524932036079, 0.993803821620386789, 0.993593990950243101, 0.993377874742376028, 0.993155311512738373, 0.992926136424692893, 0.992690181241112568, 0.992447274276370515, 0.992197240348237724, 0.991939900729707339, 0.991675073100764885, 0.991402571500124421, 0.991122206276951266, 0.990833784042592572, 0.990537107622337678, 0.990231976007230860, 0.989918184305959721, 0.989595523696843211, 0.989263781379943903, 0.988922740529329873, 0.988572180245512259, 0.988211875508085266, 0.987841597128596115, 0.987461111703673197, 0.987070181568441390, 0.986668564750254305, 0.986256014922773932, 0.985832281360428969, 0.985397108893283862, 0.984950237862351394, 0.984491404075382421, 0.984020338763167172, 0.983536768536383324, 0.983040415343026878, 0.982530996426462665, 0.982008224284132142, 0.981471806626956967, 0.980921446339477653, 0.980356841440767462, 0.979777685046162516, 0.979183665329849958, 0.978574465488356833, 0.977949763704983212, 0.977309233115223933, 0.976652541773224167, 0.975979352619314907, 0.975289323448675275, 0.974582106881169452, 0.973857350332406850, 0.973114695986074993, 0.972353780767595457, 0.971574236319154022, 0.970775688976157051, 0.969957759745166945, 0.969120064283370357, 0.968262212879633659, 0.967383810437200995, 0.966484456458091043, 0.965563745029249420, 0.964621264810514466, 0.963656599024454902, 0.962669325448138645, 0.961659016406892807, 0.960625238770115669, 0.959567553949202120, 0.958485517897644790, 0.957378681113373783, 0.956246588643398611, 0.955088780090816575, 0.953904789624252467, 0.952694145989795124, 0.951456372525496895, 0.950190987178502706, 0.948897502524875918, 0.947575425792188690, 0.946224258884945059, 0.944843498412905388, 0.943432635722381259, 0.941991156930570290, 0.940518542963000694, 0.939014269594155725, 0.937477807491348433, 0.935908622261917407, 0.934306174503814343, 0.932669919859654490, 0.930999309074301082, 0.929293788056054973, 0.927552797941520683, 0.925775775164220034, 0.923962151527024493, 0.922111354278477161, 0.920222806193075206, 0.918295925655583225, 0.916330126749447775, 0.914324819349382899, 0.912279409218196045, 0.910193298107923316, 0.908065883865342355, 0.905896560541930620, 0.903684718508336024, 0.901429744573426196, 0.899131022107981741, 0.896787931173097955, 0.894399848653358461, 0.891966148394843125, 0.889486201348031478, 0.886959375715661594, 0.884385037105603047, 0.881762548688801162, 0.879091271362348258, 0.876370563917735960, 0.873599783214341006, 0.870778284358195148, 0.867905420886087891, 0.864980544955048806, 0.862003007537254106, 0.858972158620399966, 0.855887347413582804, 0.852747922558724338, 0.849553232347576759, 0.846302624944340758, 0.842995448613926434, 0.839631051955884301, 0.836208784144030700, 0.832727995171788871, 0.829188036103263800, 0.825588259330065722, 0.821928018833893741, 0.818206670454887595, 0.814423572165751968, 0.810578084351654032, 0.806669570095891091, 0.802697395471321247, 0.798660929837545938, 0.794559546143829031, 0.790392621237732874, 0.786159536179447269, 0.781859676561782850, 0.777492432835795676, 0.773057200642005132, 0.768553381147162345, 0.763980381386521367, 0.759337614611560272, 0.754624500643094159, 0.749840466229716701, 0.744984945411501526, 0.740057379888889168, 0.735057219396679734, 0.729983922083045718, 0.724836954893473573, 0.719615793959536774, 0.714319924992397077, 0.708948843680924614, 0.703502056094321304, 0.697979079089125778, 0.692379440720471703, 0.686702680657464998, 0.680948350602538923, 0.675116014714639511, 0.669205250036087189, 0.663215646922953781, 0.657146809478787366, 0.650998355991510697, 0.644769919373312097, 0.638461147603340892, 0.632071704173012567, 0.625601268533721960, 0.619049536546755852, 0.612416220935189425, 0.605701051737544101, 0.598903776762977351, 0.592024162047768144, 0.585061992312854790, 0.578017071422175064, 0.570889222841551617, 0.563678290097858899, 0.556384137238201025, 0.549006649288823325, 0.541545732713473637, 0.534001315870922886, 0.526373349471347919, 0.518661807031273237, 0.510866685326761901, 0.502988004844539731, 0.495025810230730817, 0.486980170736876415, 0.478851180662903498, 0.470638959796703536, 0.462343653849976608, 0.453965434889990569, 0.445504501766899861, 0.436961080536263541, 0.428335424876397359, 0.419627816500190116, 0.410838565561010177, 0.401968011052323913, 0.393016521200643911, 0.383984493851421215, 0.374872356847492400, 0.365680568399689258, 0.356409617449215963, 0.347060024021396104, 0.337632339570389699, 0.328127147314478373, 0.318545062561515295, 0.308886733024135171, 0.299152839124318641, 0.289344094286904852, 0.279461245221645742, 0.269505072193395682, 0.259476389280030659, 0.249376044617692055, 0.239204920632951360, 0.228963934261493863, 0.218654037152921435, 0.208276215861277038, 0.197831492020896528, 0.187320922507196673, 0.176745599582012115, 0.166106651023098237, 0.155405240237421578, 0.144642566357864600, 0.133819864322977172, 0.122938404939413229, 0.111999494926697565, 0.101004476943974711, 0.089954729598399325, 0.078851667434835437, 0.067696740906540316, 0.056491436326517606, 0.045237275799233734, 0.033935817132401446, 0.022588653728544612, 0.011197414456069276,-0.000236236500422886, -0.011710599810830726,-0.023223941191499310,-0.034774491618642324, -0.046360447563455319,-0.057979971249120328,-0.069631190929888391, -0.081312201192412051,-0.093021063279485037,-0.104755805436331013, -0.116514423279567567,-0.128294880188955480,-0.140095107722026821, -0.151913006051668456,-0.163746444426720356,-0.175593261655630383, -0.187451266613189307,-0.199318238770351455,-0.211191928747127790, -0.223070058888519255,-0.234950323863439026,-0.246830391286552808, -0.258707902362946560,-0.270580472555511080,-0.282445692274912670, -0.294301127591998699,-0.306144320972466346,-0.317972792033602047, -0.329784038322878329,-0.341575536118173728,-0.353344741249360431, -0.365089089940983135,-0.376805999675731429,-0.388492870078386818, -0.400147083819904270,-0.411766007541267016,-0.423346992796732177, -0.434887377016063742,-0.446384484485328465,-0.457835627345809415, -0.469238106610571212,-0.480589213198190509,-0.491886228983144943, -0.503126427862333721,-0.514307076837183188,-0.525425437110771176, -0.536478765199384707,-0.547464314057906742,-0.558379334218409100, -0.569221074941310562,-0.579986785378441411,-0.590673715747338364, -0.601279118516077038,-0.611800249597932735,-0.622234369555144487, -0.632578744811042040,-0.642830648869780715,-0.652987363542914924, -0.663046180182027626,-0.673004400916620078,-0.682859339896453998, -0.692608324537526702,-0.702248696770848894,-0.711777814293184639, -0.721193051818903630,-0.730491802332087199,-0.739671478338021644, -0.748729513113205322,-0.757663361952989695,-0.766470503415969028, -0.775148440564228799,-0.783694702198559117,-0.792106844087736502, -0.800382450190975327,-0.808519133872649071,-0.816514539108381230, -0.824366341681606384,-0.832072250369703412,-0.839630008118805323, -0.847037393206393493,-0.854292220390788407,-0.861392342046654171, -0.868335649285640215,-0.875120073061290606,-0.881743585257359407, -0.888204199758679337,-0.894499973503740841,-0.900629007518149326, -0.906589447928139960,-0.912379486953341913,-0.917997363877997276, -0.923441365999854195,-0.928709829555968802,-0.933801140624666567, -0.938713736002930405,-0.943446104058500558,-0.947996785555989649, -0.952364374456335506,-0.956547518688934340,-0.960544920895817561, -0.964355339147256937,-0.967977587628204966,-0.971410537295000119, -0.974653116501790112,-0.977704311596150418,-0.980563167483399985, -0.983228788159141361,-0.985700337209578271,-0.987977038279190022, -0.990058175505368960,-0.991943093919654474,-0.993631199815224775, -0.995121961080335778,-0.996414907497424903,-0.997509631007626416, -0.998405785940474023,-0.999103089208595826,-0.999601320467236299, -0.999900322238469798,-1.000000000000000000,-0.999900322238469798, -0.999601320467236299,-0.999103089208595826,-0.998405785940474023, -0.997509631007626416,-0.996414907497424903,-0.995121961080335778, -0.993631199815224775,-0.991943093919654474,-0.990058175505368960, -0.987977038279190022,-0.985700337209578271,-0.983228788159141361, -0.980563167483399985,-0.977704311596150418,-0.974653116501790112, -0.971410537295000119,-0.967977587628204966,-0.964355339147256937, -0.960544920895817561,-0.956547518688934340,-0.952364374456335506, -0.947996785555989649,-0.943446104058500558,-0.938713736002930405, -0.933801140624666567,-0.928709829555968802,-0.923441365999854195, -0.917997363877997276,-0.912379486953341913,-0.906589447928139960, -0.900629007518149326,-0.894499973503740841,-0.888204199758679337, -0.881743585257359407,-0.875120073061290606,-0.868335649285640215, -0.861392342046654171,-0.854292220390788407,-0.847037393206393493, -0.839630008118805323,-0.832072250369703412,-0.824366341681606384, -0.816514539108381230,-0.808519133872649071,-0.800382450190975327, -0.792106844087736502,-0.783694702198559117,-0.775148440564228799, -0.766470503415969028,-0.757663361952989695,-0.748729513113205322, -0.739671478338021644,-0.730491802332087199,-0.721193051818903630, -0.711777814293184639,-0.702248696770848894,-0.692608324537526702, -0.682859339896453998,-0.673004400916620078,-0.663046180182027626, -0.652987363542914924,-0.642830648869780715,-0.632578744811042040, -0.622234369555144487,-0.611800249597932735,-0.601279118516077038, -0.590673715747338364,-0.579986785378441411,-0.569221074941310562, -0.558379334218409100,-0.547464314057906742,-0.536478765199384707, -0.525425437110771176,-0.514307076837183188,-0.503126427862333721, -0.491886228983144943,-0.480589213198190509,-0.469238106610571212, -0.457835627345809415,-0.446384484485328465,-0.434887377016063742, -0.423346992796732177,-0.411766007541267016,-0.400147083819904270, -0.388492870078386818,-0.376805999675731429,-0.365089089940983135, -0.353344741249360431,-0.341575536118173728,-0.329784038322878329, -0.317972792033602047,-0.306144320972466346,-0.294301127591998699, -0.282445692274912670,-0.270580472555511080,-0.258707902362946560, -0.246830391286552808,-0.234950323863439026,-0.223070058888519255, -0.211191928747127790,-0.199318238770351455,-0.187451266613189307, -0.175593261655630383,-0.163746444426720356,-0.151913006051668456, -0.140095107722026821,-0.128294880188955480,-0.116514423279567567, -0.104755805436331013,-0.093021063279485037,-0.081312201192412051, -0.069631190929888391,-0.057979971249120328,-0.046360447563455319, -0.034774491618642324,-0.023223941191499310,-0.011710599810830726, -0.000236236500422886, 0.011197414456069276, 0.022588653728544612, 0.033935817132401446, 0.045237275799233734, 0.056491436326517606, 0.067696740906540316, 0.078851667434835437, 0.089954729598399325, 0.101004476943974711, 0.111999494926697566, 0.122938404939413229, 0.133819864322977172, 0.144642566357864600, 0.155405240237421578, 0.166106651023098237, 0.176745599582012115, 0.187320922507196673, 0.197831492020896528, 0.208276215861277038, 0.218654037152921435, 0.228963934261493863, 0.239204920632951360, 0.249376044617692055, 0.259476389280030659, 0.269505072193395682, 0.279461245221645742, 0.289344094286904852, 0.299152839124318641, 0.308886733024135171, 0.318545062561515295, 0.328127147314478373, 0.337632339570389699, 0.347060024021396104, 0.356409617449215963, 0.365680568399689258, 0.374872356847492400, 0.383984493851421215, 0.393016521200643911, 0.401968011052323913, 0.410838565561010177, 0.419627816500190116, 0.428335424876397359, 0.436961080536263541, 0.445504501766899861, 0.453965434889990569, 0.462343653849976608, 0.470638959796703536, 0.478851180662903498, 0.486980170736876415, 0.495025810230730817, 0.502988004844539731, 0.510866685326761901, 0.518661807031273237, 0.526373349471347919, 0.534001315870922886, 0.541545732713473637, 0.549006649288823325, 0.556384137238201025, 0.563678290097858899, 0.570889222841551617, 0.578017071422175064, 0.585061992312854790, 0.592024162047768144, 0.598903776762977351, 0.605701051737544101, 0.612416220935189425, 0.619049536546755852, 0.625601268533721960, 0.632071704173012567, 0.638461147603340892, 0.644769919373312097, 0.650998355991510697, 0.657146809478787366, 0.663215646922953781, 0.669205250036087189, 0.675116014714639511, 0.680948350602538923, 0.686702680657464998, 0.692379440720471703, 0.697979079089125778, 0.703502056094321304, 0.708948843680924614, 0.714319924992397077, 0.719615793959536774, 0.724836954893473573, 0.729983922083045718, 0.735057219396679734, 0.740057379888889168, 0.744984945411501526, 0.749840466229716701, 0.754624500643094159, 0.759337614611560272, 0.763980381386521367, 0.768553381147162345, 0.773057200642005132, 0.777492432835795676, 0.781859676561782850, 0.786159536179447269, 0.790392621237732874, 0.794559546143829031, 0.798660929837545938, 0.802697395471321247, 0.806669570095891091, 0.810578084351654032, 0.814423572165751968, 0.818206670454887595, 0.821928018833893741, 0.825588259330065722, 0.829188036103263800, 0.832727995171788871, 0.836208784144030700, 0.839631051955884301, 0.842995448613926434, 0.846302624944340758, 0.849553232347576759, 0.852747922558724338, 0.855887347413582804, 0.858972158620399966, 0.862003007537254106, 0.864980544955048806, 0.867905420886087891, 0.870778284358195148, 0.873599783214341006, 0.876370563917735960, 0.879091271362348258, 0.881762548688801162, 0.884385037105603047, 0.886959375715661594, 0.889486201348031478, 0.891966148394843125, 0.894399848653358461, 0.896787931173097955, 0.899131022107981741, 0.901429744573426196, 0.903684718508336024, 0.905896560541930620, 0.908065883865342355, 0.910193298107923316, 0.912279409218196045, 0.914324819349382899, 0.916330126749447775, 0.918295925655583225, 0.920222806193075206, 0.922111354278477161, 0.923962151527024493, 0.925775775164220034, 0.927552797941520683, 0.929293788056054973, 0.930999309074301082, 0.932669919859654490, 0.934306174503814343, 0.935908622261917407, 0.937477807491348433, 0.939014269594155725, 0.940518542963000694, 0.941991156930570290, 0.943432635722381259, 0.944843498412905388, 0.946224258884945059, 0.947575425792188690, 0.948897502524875918, 0.950190987178502706, 0.951456372525496895, 0.952694145989795124, 0.953904789624252467, 0.955088780090816575, 0.956246588643398611, 0.957378681113373783, 0.958485517897644790, 0.959567553949202120, 0.960625238770115669, 0.961659016406892807, 0.962669325448138645, 0.963656599024454902, 0.964621264810514466, 0.965563745029249420, 0.966484456458091043, 0.967383810437200995, 0.968262212879633659, 0.969120064283370357, 0.969957759745166945, 0.970775688976157051, 0.971574236319154022, 0.972353780767595457, 0.973114695986074993, 0.973857350332406850, 0.974582106881169452, 0.975289323448675275, 0.975979352619314907, 0.976652541773224167, 0.977309233115223933, 0.977949763704983212, 0.978574465488356833, 0.979183665329849958, 0.979777685046162516, 0.980356841440767462, 0.980921446339477653, 0.981471806626956967, 0.982008224284132142, 0.982530996426462665, 0.983040415343026878, 0.983536768536383324, 0.984020338763167172, 0.984491404075382421, 0.984950237862351394, 0.985397108893283862, 0.985832281360428969, 0.986256014922773932, 0.986668564750254305, 0.987070181568441390, 0.987461111703673197, 0.987841597128596115, 0.988211875508085266, 0.988572180245512259, 0.988922740529329873, 0.989263781379943903, 0.989595523696843211, 0.989918184305959721, 0.990231976007230860, 0.990537107622337678, 0.990833784042592572, 0.991122206276951266, 0.991402571500124421, 0.991675073100764885, 0.991939900729707339, 0.992197240348237724, 0.992447274276370515, 0.992690181241112568, 0.992926136424692893, 0.993155311512738373, 0.993377874742376028, 0.993593990950243101, 0.993803821620386789, 0.994007524932036079, 0.994205255807228737, 0.994397165958277036, 0.994583403935056440, 0.994764115172101958, 0.994939442035497478, 0.995109523869543906, 0.995274497043192467, 0.995434494996230057, 0.995589648285204041, 0.995740084629074376, 0.995885928954581466, 0.996027303441318604, 0.996164327566498348, 0.996297118149402643, 0.996425789395506935, 0.996550452940269003, 0.996671217892573640, 0.996788190877824762, 0.996901476080676923, 0.997011175287398650, 0.997117387927860392, 0.997220211117140266, 0.997319739696741197, 0.997416066275413383, 0.997509281269576410, 0.997599472943335700, 0.997686727448088298, 0.997771128861713390, 0.997852759227343225, 0.997931698591710495, 0.998008025043068486, 0.998081814748680683, 0.998153141991876753, 0.998222079208672188, 0.998288697023949108, 0.998353064287196065, 0.998415248107804928, 0.998475313889923187, 0.998533325366860305, 0.998589344635046953, 0.998643432187546256, 0.998695646947116361, 0.998746046298823916, 0.998794686122208234, 0.998841620822996168, 0.998886903364367892, 0.998930585297774021, 0.998972716793304686, 0.999013346669611371, 0.999052522423382502, 0.999090290258373961, 0.999126695113995876, 0.999161780693457183, 0.999195589491469653, 0.999228162821513196, 0.999259540842664428, 0.999289762585990620, 0.999318865980511302, 0.999346887878729902, 0.999373864081737964, 0.999399829363894577, 0.999424817497083796, 0.999448861274552931, 0.999471992534334702, 0.999494242182256338, 0.999515640214538844, 0.999536215739989700, 0.999555997001792388, 0.999575011398896209, 0.999593285507009946, 0.999610845099202994, 0.999627715166117661, 0.999643919935796418, 0.999659482893127923, 0.999674426798915724, 0.999688773708573612, 0.999702544990451603, 0.999715761343796651, 0.999728442816352172, 0.999740608821600544, 0.999752278155652787, 0.999763469013789629, 0.999774199006658256, 0.999784485176129012, 0.999794344010816391, 0.999803791461268669, 0.999812842954830533, 0.999821513410183109, 0.999829817251565795, 0.999837768422684304, 0.999845380400309356, 0.999852666207570466, 0.999859638426949243, 0.999866309212976682, 0.999872690304638861, 0.999878793037495517, 0.999884628355515930, 0.999890206822636547, 0.999895538634044786, 0.999900633627193432, 0.999905501292550027, 0.999910150784085656, 0.999914590929507500, 0.999918830240239513, 0.999922876921155570, 0.999926738880069399, 0.999930423736985597, 0.999933938833115999, 0.999937291239665653, 0.999940487766392615, 0.999943534969945755, 0.999946439161984748, 0.999949206417086360, 0.999951842580441150, 0.999954353275344637, 0.999956743910486974, 0.999959019687045114, 0.999961185605581435, 0.999963246472752749, 0.999965206907833563, 0.999967071349057453, 0.999968844059780340, 0.999970529134469444, 0.999972130504521630, 0.999973651943914823, 0.999975097074696134, 0.999976469372310286, 0.999977772170771892, 0.999979008667685086, 0.999980181929113964, 0.999981294894307251, 0.999982350380280572, 0.999983351086259624, 0.999984299597987547, 0.999985198391899714, 0.999986049839169120, 0.999986856209625497, 0.999987619675551262, 0.999988342315357314, 0.999989026117141680, 0.999989672982133965, 0.999990284728028474, 0.999990863092208884, 0.999991409734867244, 0.999991926242020062, 0.999992414128424191, 0.999992874840395152, 0.999993309758530519, 0.999993720200340929, 0.999994107422791210, 0.999994472624754123, 0.999994816949379113, 0.999995141486378458, 0.999995447274233142, 0.999995735302320727, 0.999996006512967456, 0.999996261803426799, 0.999996502027786556, 0.999996727998806641, 0.999996940489689589, 0.999997140235785806, 0.999997327936235523, 0.999997504255549382, 0.999997669825129538, 0.999997825244733106, 0.999997971083879765, 0.999998107883205263, 0.999998236155762546, 0.999998356388272175, 0.999998469042323677, 0.999998574555529417, 0.999998673342632550, 0.999998765796570563, 0.999998852289495900, 0.999998933173755098, 0.999999008782827846, 0.999999079432227329, 0.999999145420363200, 0.999999207029368468, 0.999999264525891562, 0.999999318161854815, 0.999999368175180541, 0.999999414790485886, 0.999999458219747570, 0.999999498662937619, 0.999999536308631163, 0.999999571334587317, 0.999999603908304169, 0.999999634187548836, 0.999999662320863547, 0.999999688448048653, 0.999999712700623478, 0.999999735202265853, 0.999999756069231181, 0.999999775410751836, 0.999999793329417684, 0.999999809921538490, 0.999999825277488929, 0.999999839482036934, 0.999999852614656049, 0.999999864749822467, 0.999999875957297378, 0.999999886302395267, 0.999999895846238746, 0.999999904646000501, 0.999999912755132922, 0.999999920223585938, 0.999999927098013594, 0.999999933421969854, 0.999999939236094126, 0.999999944578286962, 0.999999949483876391, 0.999999953985775308, 0.999999958114630336, 0.999999961898962559, 0.999999965365300513, 0.999999968538305792, 0.999999971440891640, 0.999999974094334852, 0.999999976518381320, 0.999999978731345533, 0.999999980750204333, 0.999999982590685213, 0.999999984267349431, 0.999999985793670211, 0.999999987182106274, 0.999999988444170952, 0.999999989590497098, 0.999999990630898044, 0.999999991574424781, 0.999999992429419595, 0.999999993203566335, 0.999999993903937496, 0.999999994537038304, 0.999999995108847963, 0.999999995624858219, 0.999999996090109403, 0.999999996509224094, 0.999999996886438534, 0.999999997225631932, 0.999999997530353782, 0.999999997803849312, 0.999999998049083167, 0.999999998268761454, 0.999999998465352222, 0.999999998641104503, 0.999999998798065975, 0.999999998938099356, 0.999999999062897601, 0.999999999173997973, 0.999999999272795076, 0.999999999360552899, 0.999999999438415958, 0.999999999507419574, 0.999999999568499364, 0.999999999622499985, 0.999999999670183196, 0.999999999712235270, 0.999999999749273812, 0.999999999781854027, 0.999999999810474468, 0.999999999835582310, 0.999999999857578178, 0.999999999876820576, 0.999999999893629921, 0.999999999908292246, 0.999999999921062564, 0.999999999932167941, 0.999999999941810300, 0.999999999950168957, 0.999999999957402942, 0.999999999963653093, 0.999999999969043962, 0.999999999973685534, 0.999999999977674789, 0.999999999981097108, 0.999999999984027545, 0.999999999986531966, 0.999999999988668083, 0.999999999990486378, 0.999999999992030933, 0.999999999993340171, 0.999999999994447526, 0.999999999995382035, 0.999999999996168868, 0.999999999996829800, 0.999999999997383634, 0.999999999997846570, 0.999999999998232537, 0.999999999998553488, 0.999999999998819651, 0.999999999999039767, 0.999999999999221279, 0.999999999999370516, 0.999999999999492844, 0.999999999999592800, 0.999999999999674212, 0.999999999999740299, 0.999999999999793761, 0.999999999999836855, 0.999999999999871465, 0.999999999999899155, 0.999999999999921221, 0.999999999999938734, 0.999999999999952574, 0.999999999999963464, 0.999999999999971994, 0.999999999999978644, 0.999999999999983802, 0.999999999999987784, 0.999999999999990840, 0.999999999999993173, 0.999999999999994945, 0.999999999999996281, 0.999999999999997283, 0.999999999999998030, 0.999999999999998582, 0.999999999999998987, 0.999999999999999283, 0.999999999999999497, 0.999999999999999650, 0.999999999999999759, 0.999999999999999836, 0.999999999999999889, 0.999999999999999926, 0.999999999999999951, 0.999999999999999968, 0.999999999999999980, 0.999999999999999987, 0.999999999999999992, 0.999999999999999995, 0.999999999999999997, 0.999999999999999998, 0.999999999999999999, 0.999999999999999999, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000, 1.000000000000000000 }; // Values of sin(2pi*coordinate[i]), i = 0,..,POINTS-1. static const double sin2pix[POINTS] = { 0.0000000000000000000 ,2.325730956994801644e-19 ,2.976901816632284619e-17 , 5.08621956521610674e-16 ,3.81026123151067851e-15 ,1.816812236901758798e-14 , 6.50969564375764837e-14 ,1.914991446042941506e-13 ,4.87624823499943125e-13 , 1.112053071517674883e-12 ,2.324859491701077721e-12 ,4.53013329432016700e-12 , 8.32900443204479435e-12 ,1.458433847332530848e-11 ,2.449825371576637154e-11 , 3.97036115415826655e-11 ,6.23706272023704837e-11 ,9.53297440911970652e-11 , 1.422119101172445236e-10 ,2.076073900428560728e-10 ,2.972442425757917232e-10 , 4.18187585631845309e-10 ,5.79060767495804884e-10 ,7.90289555613217877e-10 , 1.064370448442777918e-9 ,1.416164209190671797e-9 ,1.863215713335265403e-9 , 2.426101194634481865e-9 ,3.128803966790610961e-9 ,3.99911969012962562e-9 , 5.06909224453597014e-9 ,6.37548126147088806e-9 ,7.96026235919439909e-9 , 9.87116111630979836e-9 ,1.216222180945688236e-8 ,1.489441193139790908e-8 , 1.813626349587053951e-8 ,2.196455212542670784e-8 ,2.646501490803761135e-8 , 3.17331079975249390e-8 ,3.78748049218792711e-8 ,4.50074365522505363e-8 , 5.32605736738448247e-8 ,6.27769530881390943e-8 ,7.37134481637328051e-8 , 8.62420847407957527e-8 ,1.005511032814468893e-7 ,1.168460681455123146e-7 , 1.353510248579645359e-7 ,1.563097062209422431e-7 ,1.799867881095929772e-7 , 2.066691957770729959e-7 ,2.366674614798822290e-7 ,2.703171342203103740e-7 , 3.079802423881258831e-7 ,3.50046810068755848e-7 ,3.96936427770084668e-7 , 4.49099878304646022e-7 ,5.07020818548399169e-7 ,5.71217517781470294e-7 , 6.42244653300205630e-7 ,7.20695163973628829e-7 ,8.07202162400923876e-7 , 9.02440906309880051e-7 ,1.007130829819340644e-6 ,1.122037635171595661e-6 , 1.247975445523354278e-6 ,1.385809019366428817e-6 ,1.536456027131562173e-6 , 1.700889390510938628e-6 ,1.880139685016837448e-6 ,2.075297606275623472e-6 , 2.287516500537822695e-6 ,2.518014959866407565e-6 ,2.768079482446620198e-6 , 3.039067198441695819e-6 ,3.33240866179971747e-6 ,3.64961070839754033e-6 , 3.99225938088827387e-6 ,4.36202292059920668e-6 ,4.76065482680730588e-6 , 5.18999698369952539e-6 ,5.65198285530511824e-6 ,6.14864074866697239e-6 , 6.68209714549868124e-6 ,7.25458010255362324e-6 ,7.86842272091176420e-6 , 8.52606668436921517e-6 ,9.23006586709478283e-6 ,9.98309001069684186e-6 , 0.00001078792847082284498,0.00001164749403339266985,0.00001256482680054578792, 0.00001354309814636093250,0.00001458561474238554678,0.00001569582265299081119, 0.00001687731150054648856,0.00001813381870038818860,0.00001946923376552794636, 0.00002088760268103723475,0.00002239313234800969658,0.00002399019509698898818, 0.00002568333327072518221,0.00002747726387610118377,0.00002937688330504857812, 0.00003138727212425025348,0.0000335136999334050335 ,0.0000357616302918074163 , 0.0000381367257129733554 ,0.0000406448527270208336 ,0.0000432920870104917856 , 0.0000460847185832797169 ,0.0000490292570723051519 ,0.0000521324370415588309 , 0.0000554012233881103645 ,0.0000588428168036578508 ,0.0000624646593011717733 , 0.0000662744398061643237 ,0.0000702800998120931464 ,0.0000744898390993863806 , 0.0000789121215175537832 ,0.0000835556808298266662 ,0.0000884295266197473684 , 0.0000935429502591070158 ,0.0000989055309366084108 ,0.0001045271417466090278 , 0.0001104179558372772982 ,0.0001165884526174736252 ,0.0001230494240216459082 , 0.0001298119808320077618 ,0.0001368875590572460988 ,0.0001442879263669833172 , 0.0001520251885811979842 ,0.0001601117962137866601 ,0.0001685605510694283457 , 0.0001773846128928919825 ,0.0001865975060699064842 ,0.0001962131263786919328 , 0.0002062457477912298509 ,0.0002167100293233298428 ,0.0002276210219325294172 , 0.0002389941754628434357 ,0.0002508453456353594036 ,0.0002631908010836547202 , 0.0002760472304329920474 ,0.0002894317494222291397 ,0.0003033619080673598088 , 0.000317855697865583174 ,0.000332931559038778986 ,0.000348608387815247606 , 0.000364905543748554167 ,0.000381842857072297573 ,0.000399440636089606264 , 0.000417719674596144159 ,0.000436701259335391785 ,0.000456407177484949451 , 0.000476859724172591285 ,0.000498081710020781163 ,0.000520096468718343894 , 0.000542927864617967606 ,0.000566600300358196006 ,0.000591138724508552151 , 0.000616568639236418499 ,0.000642916107994281355 ,0.000670207763225931378 , 0.000698470814090195555 ,0.000727733054200760028 ,0.000758022869380627308 , 0.000789369245429735804 ,0.000821801775904254164 ,0.000855350669906047765 , 0.000890046759880799671 ,0.000925921509423253638 ,0.000963007021088032183 , 0.001001336044204468417 ,0.001040941982693876220 ,0.001081858902887669430 , 0.001124121541344727080 ,0.001167765312666388215 ,0.001212826317307446611 , 0.001259341349381502686 ,0.001307347904459017087 ,0.001356884187356397853 , 0.001407989119914440673 ,0.001460702348764429599 ,0.001515064253080193626 , 0.001571115952314402809 ,0.001628899313917376041 ,0.001688456961036661311 , 0.001749832280195638111 ,0.001813069428949380733 ,0.001878213343516010483 , 0.001945309746381754260 ,0.002014405153877916634 ,0.002085546883727962341 , 0.002158783062562896139 ,0.002234162633403117161 ,0.002311735363104915194 , 0.002391551849769766876 ,0.002473663530114580423 ,0.002558122686801028321 , 0.002644982455722098368 ,0.002734296833243984525 ,0.002826120683401430259 , 0.002920509745044628372 ,0.003017520638935772761 ,0.003117210874793349076 , 0.00321963885828224288 ,0.00332486389794773559 ,0.00343294621209145038 , 0.00354394693558730177 ,0.00365792812663549490 ,0.00377495277345261211 , 0.00389508480089581642 ,0.00401838907701919367 ,0.00414493141956024666 , 0.00427477860235454695 ,0.00440799836167654156 ,0.00454465940250450380 , 0.00468483140470760932 ,0.00482858502915310986 ,0.00497599192373156918 , 0.00512712472929811697 ,0.00528205708552766763 ,0.00544086363668204256 , 0.00560362003728692523 ,0.00577040295771656913 ,0.00594129008968416970 , 0.00611636015163580134 ,0.00629569289404581089 ,0.00647936910461154906 , 0.00666747061334531045 ,0.00686008029756134244 ,0.00705728208675577188 , 0.00725916096737728721 ,0.00746580298748640168 ,0.00767729526130111106 , 0.00789372597362674666 ,0.00811518438416781096 ,0.00834176083171956976 , 0.00857354673823716037 ,0.00881063461277996045 ,0.00905311805532894701 , 0.00930109176047475867 ,0.00955465152097415799 ,0.00981389423117257307 , 0.01007891789029037953 ,0.01034982160557056550 ,0.01062670559528540207 , 0.01090967119159972183 ,0.01119882084328838641 ,0.01149425811830550194 , 0.01179608770620291840 ,0.01210441542039552443 ,0.01241934820027082460 , 0.01274099411314025962 ,0.01306946235602970321 ,0.01340486325730654087 , 0.01374730827814070651 ,0.01409691001379702235 ,0.01445378219475615567 , 0.01481803968766147283 ,0.01518979849608903704 ,0.01556917576113796009 , 0.01595628976183828163 ,0.01635125991537351097 ,0.01675420677711492633 , 0.01716525204046468516 ,0.01758451853650475605 ,0.01801213023344863822 , 0.01844821223589278845 ,0.01889289078386462724 ,0.01934629325166394676 , 0.01980854814649449143 ,0.02027978510688242930 ,0.02076013490087837705 , 0.02124972942403958506 ,0.02174870169718883003 ,0.02225718586394650198 , 0.02277531718803231016 ,0.02330323205033296737 ,0.02384106794573214567 , 0.02438896347969892790 ,0.02494705836463090794 ,0.02551549341594802021 , 0.02609441054793310317 ,0.02668395276931512423 ,0.02728426417859091368 , 0.02789548995908117319 ,0.02851777637371643989 ,0.02915127075954860053 , 0.02979612152198346069 ,0.03045247812872978282 ,0.03112049110346011258 , 0.0318003120191786167 ,0.0324920934912910565 ,0.0331959891703719197 , 0.0339121537346236293 ,0.0346407428820226420 ,0.0353819133221471391 , 0.0361358227676809010 ,0.0369026299255878437 ,0.0376824944879515764 , 0.0384755771224742231 ,0.0392820394626286259 ,0.0401020440974579253 , 0.0409357545610163851 ,0.0417833353214451996 ,0.0426449517696768892 , 0.0435207702077617537 ,0.0444109578368097184 ,0.0453156827445407654 , 0.0462351138924370016 ,0.0471694211024892690 ,0.0481187750435310570 , 0.0490833472171523255 ,0.0500633099431856959 ,0.0510588363447573119 , 0.0520701003328945181 ,0.0530972765906823406 ,0.0541405405569605981 , 0.0552000684095533043 ,0.0562760370480218600 ,0.0573686240759333649 , 0.0584780077826352094 ,0.0596043671245269373 ,0.0607478817058201959 , 0.0619087317587774170 ,0.0630870981234196944 ,0.0642831622266941498 , 0.0654971060610908952 ,0.0667291121626995244 ,0.0679793635886948834 , 0.0692480438942416863 ,0.0705353371088073630 ,0.0718414277118723393 , 0.0731665006080267665 ,0.0745107411014425340 ,0.0758743348697092124 , 0.0772574679370223900 ,0.0786603266467126819 ,0.0800830976331035047 , 0.0815259677926855284 ,0.0829891242545955306 ,0.0844727543503871988 , 0.0859770455830812436 ,0.0875021855954820060 ,0.0890483621377475638 , 0.0906157630342001658 ,0.0922045761493636473 ,0.0938149893532143079 , 0.0954471904856315654 ,0.0971013673200345295 ,0.0987777075261904761 , 0.1004763986321810461 ,0.1021976279855118306 ,0.1039415827133508562 , 0.1057084496818813333 ,0.1074984154547538900 ,0.1093116662506233701 , 0.1111483878997551478 ,0.1130087657996857777 ,0.1148929848699226820 , 0.1168012295056674587 ,0.1187336835305472894 ,0.1206905301483388224 , 0.1226719518936688135 ,0.1246781305816757245 ,0.1267092472566163995 , 0.1287654821394018724 ,0.1308470145740463023 ,0.1329540229730129827 , 0.1350866847614413324 ,0.1372451763202387504 ,0.1394296729280211972 , 0.1416403487018863636 ,0.1438773765370032939 ,0.1461409280450023498 , 0.1484311734911494365 ,0.1507482817302884587 ,0.1530924201415360344 , 0.1554637545617125736 ,0.1578624492174939159 ,0.1602886666562678333 , 0.1627425676756798250 ,0.1652243112518527723 ,0.1677340544662651816 , 0.1702719524312729188 ,0.1728381582142595341 ,0.1754328227604004909 , 0.1780560948140268478 ,0.1807081208385741972 ,0.1833890449351029413 , 0.1860990087593762828 ,0.1888381514374826321 ,0.1916066094799894709 , 0.1944045166946160854 ,0.1972320040974129692 ,0.2000891998224361160 , 0.2029762290299048621 ,0.2058932138128324079 ,0.2088402731021186435 , 0.2118175225700954244 ,0.2148250745325149954 ,0.2178630378489728404 , 0.2209315178217568419 ,0.2240306160931152772 ,0.2271604305409368429 , 0.2303210551728366033 ,0.2335125800186424882 ,0.2367350910212777325 , 0.2399886699260354441 ,0.2432733941682423240 ,0.2465893367593094196 , 0.2499365661711687010 ,0.2533151462190951786 ,0.2567251359429152562 , 0.2601665894866030186 ,0.2636395559762671996 ,0.2671440793965326549 , 0.2706801984653212892 ,0.2742479465070385387 ,0.2778473513241727128 , 0.2814784350673157311 ,0.2851412141036150684 ,0.2888356988836680375 , 0.2925618938068708935 ,0.2963197970852366405 ,0.3001094006056968601 , 0.3039306897909043592 ,0.3077836434585549539 ,0.3116682336792482708 , 0.3155844256329090480 ,0.319532177463792066 ,0.323511440134095523 , 0.327522157276209412 ,0.331564265043627199 ,0.335637691960550962 , 0.339742358770221964 ,0.343878178282010549 ,0.348045055217301208 , 0.352242886054210606 ,0.356471558871178418 ,0.360730953189472876 , 0.365020939814655027 ,0.369341380677047856 ,0.373692128671258614 , 0.378073027494804919 ,0.382483911485897445 ,0.386924605460434345 , 0.391394924548264867 ,0.395894674028782012 ,0.400423649165906501 , 0.404981635042526747 ,0.409568406394462023 ,0.414183727444018542 , 0.418827351733210674 ,0.423499021956722151 ,0.428198469794684674 , 0.432925415745354001 ,0.437679568957766237 ,0.442460627064459742 , 0.447268276014350787 ,0.452102189905853801 ,0.456962030820339825 , 0.461847448656029553 ,0.466758080962420106 ,0.471693552775347523 , 0.476653476452789733 ,0.481637451511517603 ,0.486645064464704500 , 0.491675888660607630 ,0.496729484122437242 ,0.501805397389532660 , 0.506903161359966901 ,0.512022295134704501 ,0.517162303863439966 , 0.522322678592247112 ,0.527502896113172310 ,0.532702418815907481 , 0.537920694541681411 ,0.543157156439510716 ,0.548411222824954477 , 0.553682297041519264 ,0.558969767324863902 ,0.564273006669955948 , 0.569591372701334388 ,0.574924207546635639 ,0.580270837713542344 , 0.585630573970316923 ,0.591002711230084164 ,0.596386528439029464 , 0.601781288468681556 ,0.607186238012450695 ,0.612600607486595414 , 0.618023610935792922 ,0.623454445943490173 ,0.628892293547214450 , 0.634336318159024078 ,0.639785667491281492 ,0.645239472487932465 , 0.650696847261476723 ,0.656156889035816482 ,0.661618678095170684 , 0.667081277739243774 ,0.672543734244838819 ,0.678005076834105597 , 0.683464317649615004 ,0.688920451736451614 ,0.694372457031516708 , 0.699819294360234265 ,0.705259907440852557 ,0.710693222896533889 , 0.716118150275424804 ,0.721533582078898675 ,0.726938393798161997 , 0.732331443959414957 ,0.737711574177755901 ,0.743077609220018167 , 0.748428357076726420 ,0.753762609043358119 ,0.759079139811093945 , 0.764376707567239138 ,0.769654054105495474 ,0.774909904946261277 , 0.780142969467134214 ,0.785351941043788846 ,0.790535497201397816 , 0.795692299776762276 ,0.800820995091313643 ,0.805920214135144997 , 0.810988572762226436 ,0.816024671896954456 ,0.821027097752180905 , 0.825994422058862348 ,0.830925202307465631 ,0.835817982001260217 , 0.840671290921622332 ,0.845483645405470183 ,0.850253548634943501 , 0.854979490939434338 ,0.859659950110069532 ,0.864293391726738401 , 0.868878269497752189 ,0.873413025612214405 ,0.877896091105173651 , 0.882325886235622621 ,0.886700820877398878 ,0.891019294923034612 , 0.895279698700593969 ,0.899480413403527652 ,0.903619811533565345 , 0.907696257356657152 ,0.911708107371965593 ,0.915653710793899858 , 0.919531410047173872 ,0.923339541274859442 ,0.927076434859395139 , 0.930740415956500831 ,0.934329805041936748 ,0.937842918471034764 , 0.941278069050918163 ,0.944633566625314564 ,0.947907718671854843 , 0.951098830911738973 ,0.954205207931637486 ,0.957225153817685004 , 0.960156972801409793 ,0.962998969917430691 ,0.965749451672740009 , 0.968406726727378150 ,0.970969106586292704 ,0.973434906302161694 , 0.975802445188947481 ,0.978070047545934581 ,0.980236043391991352 , 0.982298769209782131 ,0.984256568699642989 ,0.986107793542820884 , 0.987850804173762509 ,0.989483970561125733 ,0.991005672997173100 , 0.992414302895193494 ,0.993708263594584709 ,0.994885971173216454 , 0.995945855266680077 ,0.996886359894018267 ,0.997705944289514971 , 0.998403083740112958 ,0.998976270428013751 ,0.999424014278002132 , 0.999744843809025057 ,0.999937306989542725 ,0.999999972096157545 , 0.999931428575015123 ,0.999730287905459920 ,0.999395184465417051 , 0.998924776397960864 ,0.998317746478520325 ,0.997572802982161011 , 0.996688680550373615 ,0.995664141056789310 ,0.994497974471233180 , 0.993188999721518142 ,0.991736065552373445 ,0.990138051380893906 , 0.988393868147888574 ,0.986502459164500503 ,0.984462800953462804 , 0.982273904084350100 ,0.979934814002179007 ,0.977444611848706289 , 0.974802415275768873 ,0.972007379250006061 ,0.969058696848300947 , 0.965955600043275338 ,0.962697360478170375 ,0.959283290230443521 , 0.955712742563411730 ,0.951985112665270361 ,0.948099838374817814 , 0.944056400893216929 ,0.939854325481125929 ,0.935493182140534109 , 0.930972586280640557 ,0.926292199367118003 ,0.921451729554108363 , 0.916450932298301776 ,0.911289610954456802 ,0.905967617351726095 , 0.900484852350159211 ,0.894841266376762237 ,0.889036859940502765 , 0.883071684125658173 ,0.876945841062915464 ,0.870659484377641808 , 0.864212819614756642 ,0.857606104639648509 ,0.850839650014592963 , 0.843913819350141612 ,0.836829029630966886 ,0.829585751515662297 , 0.822184509610013818 ,0.814625882713274548 ,0.806910504036992023 , 0.799039061395955400 ,0.791012297370848215 ,0.782831009442211531 , 0.774496050095342031 ,0.766008326895769909 ,0.757368802534982333 , 0.748578494846079689 ,0.739638476789073830 ,0.730549876405560080 , 0.721313876742517749 ,0.711931715745017447 ,0.702404686117637431 , 0.692734135154415632 ,0.682921464537188817 ,0.672968130102195536 , 0.662875641574845093 ,0.652645562272580634 ,0.642279508775790706 , 0.631779150566750069 ,0.621146209636597348 ,0.610382460060384023 , 0.599489727540256439 ,0.588469888916859849 ,0.577324871649080938 , 0.566056653262272855 ,0.554667260765134398 ,0.543158770035442683 , 0.531533305174866289 ,0.519793037833113544 ,0.507940186501698194 , 0.495977015777632217 ,0.483905835597382925 ,0.471729000441458722 , 0.459448908510014911 ,0.447068000869897792 ,0.434588760573571812 , 0.422013711750400835 ,0.409345418670780527 ,0.396586484783644463 , 0.383739551727891778 ,0.370807298318308962 ,0.357792439506582776 , 0.344697725318025100 ,0.331525939764653916 ,0.318279899735297414 , 0.3049624538634104832 ,0.2915764813733144862 ,0.2781248909055922376 , 0.2646106193223904825 ,0.2510366304934018529 ,0.2374059140633172650 , 0.2237214842015579675 ,0.2099863783351139470 ,0.1962036558653321097 , 0.1823763968695135742 ,0.1685077007881945018 ,0.1546006850989991374 , 0.1406584839779671265 ,0.1266842469492696767 ,0.1126811375242407503 , 0.0986523318306601680 ,0.0846010172332352862 ,0.0705303909462367367 , 0.0564436586392516085 ,0.0423440330370243675 ,0.02823473251436176466 , 0.01411897968708295029 ,0.00000000000000000000 ,-0.01411897968708295029 , -0.02823473251436176466 ,-0.0423440330370243675 ,-0.0564436586392516085 , -0.0705303909462367367 ,-0.0846010172332352862 ,-0.0986523318306601680 , -0.1126811375242407503 ,-0.1266842469492696767 ,-0.1406584839779671265 , -0.1546006850989991374 ,-0.1685077007881945018 ,-0.1823763968695135742 , -0.1962036558653321097 ,-0.2099863783351139470 ,-0.2237214842015579675 , -0.2374059140633172650 ,-0.2510366304934018529 ,-0.2646106193223904825 , -0.2781248909055922376 ,-0.2915764813733144862 ,-0.3049624538634104832 , -0.318279899735297414 ,-0.331525939764653916 ,-0.344697725318025100 , -0.357792439506582776 ,-0.370807298318308962 ,-0.383739551727891778 , -0.396586484783644463 ,-0.409345418670780527 ,-0.422013711750400835 , -0.434588760573571812 ,-0.447068000869897792 ,-0.459448908510014911 , -0.471729000441458722 ,-0.483905835597382925 ,-0.495977015777632217 , -0.507940186501698194 ,-0.519793037833113544 ,-0.531533305174866289 , -0.543158770035442683 ,-0.554667260765134398 ,-0.566056653262272855 , -0.577324871649080938 ,-0.588469888916859849 ,-0.599489727540256439 , -0.610382460060384023 ,-0.621146209636597348 ,-0.631779150566750069 , -0.642279508775790706 ,-0.652645562272580634 ,-0.662875641574845093 , -0.672968130102195536 ,-0.682921464537188817 ,-0.692734135154415632 , -0.702404686117637431 ,-0.711931715745017447 ,-0.721313876742517749 , -0.730549876405560080 ,-0.739638476789073830 ,-0.748578494846079689 , -0.757368802534982333 ,-0.766008326895769909 ,-0.774496050095342031 , -0.782831009442211531 ,-0.791012297370848215 ,-0.799039061395955400 , -0.806910504036992023 ,-0.814625882713274548 ,-0.822184509610013818 , -0.829585751515662297 ,-0.836829029630966886 ,-0.843913819350141612 , -0.850839650014592963 ,-0.857606104639648509 ,-0.864212819614756642 , -0.870659484377641808 ,-0.876945841062915464 ,-0.883071684125658173 , -0.889036859940502765 ,-0.894841266376762237 ,-0.900484852350159211 , -0.905967617351726095 ,-0.911289610954456802 ,-0.916450932298301776 , -0.921451729554108363 ,-0.926292199367118003 ,-0.930972586280640557 , -0.935493182140534109 ,-0.939854325481125929 ,-0.944056400893216929 , -0.948099838374817814 ,-0.951985112665270361 ,-0.955712742563411730 , -0.959283290230443521 ,-0.962697360478170375 ,-0.965955600043275338 , -0.969058696848300947 ,-0.972007379250006061 ,-0.974802415275768873 , -0.977444611848706289 ,-0.979934814002179007 ,-0.982273904084350100 , -0.984462800953462804 ,-0.986502459164500503 ,-0.988393868147888574 , -0.990138051380893906 ,-0.991736065552373445 ,-0.993188999721518142 , -0.994497974471233180 ,-0.995664141056789310 ,-0.996688680550373615 , -0.997572802982161011 ,-0.998317746478520325 ,-0.998924776397960864 , -0.999395184465417051 ,-0.999730287905459920 ,-0.999931428575015123 , -0.999999972096157545 ,-0.999937306989542725 ,-0.999744843809025057 , -0.999424014278002132 ,-0.998976270428013751 ,-0.998403083740112958 , -0.997705944289514971 ,-0.996886359894018267 ,-0.995945855266680077 , -0.994885971173216454 ,-0.993708263594584709 ,-0.992414302895193494 , -0.991005672997173100 ,-0.989483970561125733 ,-0.987850804173762509 , -0.986107793542820884 ,-0.984256568699642989 ,-0.982298769209782131 , -0.980236043391991352 ,-0.978070047545934581 ,-0.975802445188947481 , -0.973434906302161694 ,-0.970969106586292704 ,-0.968406726727378150 , -0.965749451672740009 ,-0.962998969917430691 ,-0.960156972801409793 , -0.957225153817685004 ,-0.954205207931637486 ,-0.951098830911738973 , -0.947907718671854843 ,-0.944633566625314564 ,-0.941278069050918163 , -0.937842918471034764 ,-0.934329805041936748 ,-0.930740415956500831 , -0.927076434859395139 ,-0.923339541274859442 ,-0.919531410047173872 , -0.915653710793899858 ,-0.911708107371965593 ,-0.907696257356657152 , -0.903619811533565345 ,-0.899480413403527652 ,-0.895279698700593969 , -0.891019294923034612 ,-0.886700820877398878 ,-0.882325886235622621 , -0.877896091105173651 ,-0.873413025612214405 ,-0.868878269497752189 , -0.864293391726738401 ,-0.859659950110069532 ,-0.854979490939434338 , -0.850253548634943501 ,-0.845483645405470183 ,-0.840671290921622332 , -0.835817982001260217 ,-0.830925202307465631 ,-0.825994422058862348 , -0.821027097752180905 ,-0.816024671896954456 ,-0.810988572762226436 , -0.805920214135144997 ,-0.800820995091313643 ,-0.795692299776762276 , -0.790535497201397816 ,-0.785351941043788846 ,-0.780142969467134214 , -0.774909904946261277 ,-0.769654054105495474 ,-0.764376707567239138 , -0.759079139811093945 ,-0.753762609043358119 ,-0.748428357076726420 , -0.743077609220018167 ,-0.737711574177755901 ,-0.732331443959414957 , -0.726938393798161997 ,-0.721533582078898675 ,-0.716118150275424804 , -0.710693222896533889 ,-0.705259907440852557 ,-0.699819294360234265 , -0.694372457031516708 ,-0.688920451736451614 ,-0.683464317649615004 , -0.678005076834105597 ,-0.672543734244838819 ,-0.667081277739243774 , -0.661618678095170684 ,-0.656156889035816482 ,-0.650696847261476723 , -0.645239472487932465 ,-0.639785667491281492 ,-0.634336318159024078 , -0.628892293547214450 ,-0.623454445943490173 ,-0.618023610935792922 , -0.612600607486595414 ,-0.607186238012450695 ,-0.601781288468681556 , -0.596386528439029464 ,-0.591002711230084164 ,-0.585630573970316923 , -0.580270837713542344 ,-0.574924207546635639 ,-0.569591372701334388 , -0.564273006669955948 ,-0.558969767324863902 ,-0.553682297041519264 , -0.548411222824954477 ,-0.543157156439510716 ,-0.537920694541681411 , -0.532702418815907481 ,-0.527502896113172310 ,-0.522322678592247112 , -0.517162303863439966 ,-0.512022295134704501 ,-0.506903161359966901 , -0.501805397389532660 ,-0.496729484122437242 ,-0.491675888660607630 , -0.486645064464704500 ,-0.481637451511517603 ,-0.476653476452789733 , -0.471693552775347523 ,-0.466758080962420106 ,-0.461847448656029553 , -0.456962030820339825 ,-0.452102189905853801 ,-0.447268276014350787 , -0.442460627064459742 ,-0.437679568957766237 ,-0.432925415745354001 , -0.428198469794684674 ,-0.423499021956722151 ,-0.418827351733210674 , -0.414183727444018542 ,-0.409568406394462023 ,-0.404981635042526747 , -0.400423649165906501 ,-0.395894674028782012 ,-0.391394924548264867 , -0.386924605460434345 ,-0.382483911485897445 ,-0.378073027494804919 , -0.373692128671258614 ,-0.369341380677047856 ,-0.365020939814655027 , -0.360730953189472876 ,-0.356471558871178418 ,-0.352242886054210606 , -0.348045055217301208 ,-0.343878178282010549 ,-0.339742358770221964 , -0.335637691960550962 ,-0.331564265043627199 ,-0.327522157276209412 , -0.323511440134095523 ,-0.319532177463792066 ,-0.3155844256329090480 , -0.3116682336792482708 ,-0.3077836434585549539 ,-0.3039306897909043592 , -0.3001094006056968601 ,-0.2963197970852366405 ,-0.2925618938068708935 , -0.2888356988836680375 ,-0.2851412141036150684 ,-0.2814784350673157311 , -0.2778473513241727128 ,-0.2742479465070385387 ,-0.2706801984653212892 , -0.2671440793965326549 ,-0.2636395559762671996 ,-0.2601665894866030186 , -0.2567251359429152562 ,-0.2533151462190951786 ,-0.2499365661711687010 , -0.2465893367593094196 ,-0.2432733941682423240 ,-0.2399886699260354441 , -0.2367350910212777325 ,-0.2335125800186424882 ,-0.2303210551728366033 , -0.2271604305409368429 ,-0.2240306160931152772 ,-0.2209315178217568419 , -0.2178630378489728404 ,-0.2148250745325149954 ,-0.2118175225700954244 , -0.2088402731021186435 ,-0.2058932138128324079 ,-0.2029762290299048621 , -0.2000891998224361160 ,-0.1972320040974129692 ,-0.1944045166946160854 , -0.1916066094799894709 ,-0.1888381514374826321 ,-0.1860990087593762828 , -0.1833890449351029413 ,-0.1807081208385741972 ,-0.1780560948140268478 , -0.1754328227604004909 ,-0.1728381582142595341 ,-0.1702719524312729188 , -0.1677340544662651816 ,-0.1652243112518527723 ,-0.1627425676756798250 , -0.1602886666562678333 ,-0.1578624492174939159 ,-0.1554637545617125736 , -0.1530924201415360344 ,-0.1507482817302884587 ,-0.1484311734911494365 , -0.1461409280450023498 ,-0.1438773765370032939 ,-0.1416403487018863636 , -0.1394296729280211972 ,-0.1372451763202387504 ,-0.1350866847614413324 , -0.1329540229730129827 ,-0.1308470145740463023 ,-0.1287654821394018724 , -0.1267092472566163995 ,-0.1246781305816757245 ,-0.1226719518936688135 , -0.1206905301483388224 ,-0.1187336835305472894 ,-0.1168012295056674587 , -0.1148929848699226820 ,-0.1130087657996857777 ,-0.1111483878997551478 , -0.1093116662506233701 ,-0.1074984154547538900 ,-0.1057084496818813333 , -0.1039415827133508562 ,-0.1021976279855118306 ,-0.1004763986321810461 , -0.0987777075261904761 ,-0.0971013673200345295 ,-0.0954471904856315654 , -0.0938149893532143079 ,-0.0922045761493636473 ,-0.0906157630342001658 , -0.0890483621377475638 ,-0.0875021855954820060 ,-0.0859770455830812436 , -0.0844727543503871988 ,-0.0829891242545955306 ,-0.0815259677926855284 , -0.0800830976331035047 ,-0.0786603266467126819 ,-0.0772574679370223900 , -0.0758743348697092124 ,-0.0745107411014425340 ,-0.0731665006080267665 , -0.0718414277118723393 ,-0.0705353371088073630 ,-0.0692480438942416863 , -0.0679793635886948834 ,-0.0667291121626995244 ,-0.0654971060610908952 , -0.0642831622266941498 ,-0.0630870981234196944 ,-0.0619087317587774170 , -0.0607478817058201959 ,-0.0596043671245269373 ,-0.0584780077826352094 , -0.0573686240759333649 ,-0.0562760370480218600 ,-0.0552000684095533043 , -0.0541405405569605981 ,-0.0530972765906823406 ,-0.0520701003328945181 , -0.0510588363447573119 ,-0.0500633099431856959 ,-0.0490833472171523255 , -0.0481187750435310570 ,-0.0471694211024892690 ,-0.0462351138924370016 , -0.0453156827445407654 ,-0.0444109578368097184 ,-0.0435207702077617537 , -0.0426449517696768892 ,-0.0417833353214451996 ,-0.0409357545610163851 , -0.0401020440974579253 ,-0.0392820394626286259 ,-0.0384755771224742231 , -0.0376824944879515764 ,-0.0369026299255878437 ,-0.0361358227676809010 , -0.0353819133221471391 ,-0.0346407428820226420 ,-0.0339121537346236293 , -0.0331959891703719197 ,-0.0324920934912910565 ,-0.0318003120191786167 , -0.03112049110346011258 ,-0.03045247812872978282 ,-0.02979612152198346069 , -0.02915127075954860053 ,-0.02851777637371643989 ,-0.02789548995908117319 , -0.02728426417859091368 ,-0.02668395276931512423 ,-0.02609441054793310317 , -0.02551549341594802021 ,-0.02494705836463090794 ,-0.02438896347969892790 , -0.02384106794573214567 ,-0.02330323205033296737 ,-0.02277531718803231016 , -0.02225718586394650198 ,-0.02174870169718883003 ,-0.02124972942403958506 , -0.02076013490087837705 ,-0.02027978510688242930 ,-0.01980854814649449143 , -0.01934629325166394676 ,-0.01889289078386462724 ,-0.01844821223589278845 , -0.01801213023344863822 ,-0.01758451853650475605 ,-0.01716525204046468516 , -0.01675420677711492633 ,-0.01635125991537351097 ,-0.01595628976183828163 , -0.01556917576113796009 ,-0.01518979849608903704 ,-0.01481803968766147283 , -0.01445378219475615567 ,-0.01409691001379702235 ,-0.01374730827814070651 , -0.01340486325730654087 ,-0.01306946235602970321 ,-0.01274099411314025962 , -0.01241934820027082460 ,-0.01210441542039552443 ,-0.01179608770620291840 , -0.01149425811830550194 ,-0.01119882084328838641 ,-0.01090967119159972183 , -0.01062670559528540207 ,-0.01034982160557056550 ,-0.01007891789029037953 , -0.00981389423117257307 ,-0.00955465152097415799 ,-0.00930109176047475867 , -0.00905311805532894701 ,-0.00881063461277996045 ,-0.00857354673823716037 , -0.00834176083171956976 ,-0.00811518438416781096 ,-0.00789372597362674666 , -0.00767729526130111106 ,-0.00746580298748640168 ,-0.00725916096737728721 , -0.00705728208675577188 ,-0.00686008029756134244 ,-0.00666747061334531045 , -0.00647936910461154906 ,-0.00629569289404581089 ,-0.00611636015163580134 , -0.00594129008968416970 ,-0.00577040295771656913 ,-0.00560362003728692523 , -0.00544086363668204256 ,-0.00528205708552766763 ,-0.00512712472929811697 , -0.00497599192373156918 ,-0.00482858502915310986 ,-0.00468483140470760932 , -0.00454465940250450380 ,-0.00440799836167654156 ,-0.00427477860235454695 , -0.00414493141956024666 ,-0.00401838907701919367 ,-0.00389508480089581642 , -0.00377495277345261211 ,-0.00365792812663549490 ,-0.00354394693558730177 , -0.00343294621209145038 ,-0.00332486389794773559 ,-0.00321963885828224288 , -0.003117210874793349076 ,-0.003017520638935772761 ,-0.002920509745044628372 , -0.002826120683401430259 ,-0.002734296833243984525 ,-0.002644982455722098368 , -0.002558122686801028321 ,-0.002473663530114580423 ,-0.002391551849769766876 , -0.002311735363104915194 ,-0.002234162633403117161 ,-0.002158783062562896139 , -0.002085546883727962341 ,-0.002014405153877916634 ,-0.001945309746381754260 , -0.001878213343516010483 ,-0.001813069428949380733 ,-0.001749832280195638111 , -0.001688456961036661311 ,-0.001628899313917376041 ,-0.001571115952314402809 , -0.001515064253080193626 ,-0.001460702348764429599 ,-0.001407989119914440673 , -0.001356884187356397853 ,-0.001307347904459017087 ,-0.001259341349381502686 , -0.001212826317307446611 ,-0.001167765312666388215 ,-0.001124121541344727080 , -0.001081858902887669430 ,-0.001040941982693876220 ,-0.001001336044204468417 , -0.000963007021088032183 ,-0.000925921509423253638 ,-0.000890046759880799671 , -0.000855350669906047765 ,-0.000821801775904254164 ,-0.000789369245429735804 , -0.000758022869380627308 ,-0.000727733054200760028 ,-0.000698470814090195555 , -0.000670207763225931378 ,-0.000642916107994281355 ,-0.000616568639236418499 , -0.000591138724508552151 ,-0.000566600300358196006 ,-0.000542927864617967606 , -0.000520096468718343894 ,-0.000498081710020781163 ,-0.000476859724172591285 , -0.000456407177484949451 ,-0.000436701259335391785 ,-0.000417719674596144159 , -0.000399440636089606264 ,-0.000381842857072297573 ,-0.000364905543748554167 , -0.000348608387815247606 ,-0.000332931559038778986 ,-0.000317855697865583174 , -0.0003033619080673598088,-0.0002894317494222291397,-0.0002760472304329920474, -0.0002631908010836547202,-0.0002508453456353594036,-0.0002389941754628434357, -0.0002276210219325294172,-0.0002167100293233298428,-0.0002062457477912298509, -0.0001962131263786919328,-0.0001865975060699064842,-0.0001773846128928919825, -0.0001685605510694283457,-0.0001601117962137866601,-0.0001520251885811979842, -0.0001442879263669833172,-0.0001368875590572460988,-0.0001298119808320077618, -0.0001230494240216459082,-0.0001165884526174736252,-0.0001104179558372772982, -0.0001045271417466090278,-0.0000989055309366084108,-0.0000935429502591070158, -0.0000884295266197473684,-0.0000835556808298266662,-0.0000789121215175537832, -0.0000744898390993863806,-0.0000702800998120931464,-0.0000662744398061643237, -0.0000624646593011717733,-0.0000588428168036578508,-0.0000554012233881103645, -0.0000521324370415588309,-0.0000490292570723051519,-0.0000460847185832797169, -0.0000432920870104917856,-0.0000406448527270208336,-0.0000381367257129733554, -0.0000357616302918074163,-0.0000335136999334050335,-0.0000313872721242502535, -0.0000293768833050485781,-0.0000274772638761011838,-0.0000256833332707251822, -0.0000239901950969889882,-0.0000223931323480096966,-0.0000208876026810372348, -0.0000194692337655279464,-0.0000181338187003881886,-0.0000168773115005464886, -0.0000156958226529908112,-0.0000145856147423855468,-0.0000135430981463609325, -0.0000125648268005457879,-0.0000116474940333926699,-0.0000107879284708228450, -9.98309001069684186e-6 ,-9.23006586709478283e-6 ,-8.52606668436921517e-6 , -7.86842272091176420e-6 ,-7.25458010255362324e-6 ,-6.68209714549868124e-6 , -6.14864074866697239e-6 ,-5.65198285530511824e-6 ,-5.18999698369952539e-6 , -4.76065482680730588e-6 ,-4.36202292059920668e-6 ,-3.99225938088827387e-6 , -3.64961070839754033e-6 ,-3.33240866179971747e-6 ,-3.039067198441695819e-6 , -2.768079482446620198e-6 ,-2.518014959866407565e-6 ,-2.287516500537822695e-6 , -2.075297606275623472e-6 ,-1.880139685016837448e-6 ,-1.700889390510938628e-6 , -1.536456027131562173e-6 ,-1.385809019366428817e-6 ,-1.247975445523354278e-6 , -1.122037635171595661e-6 ,-1.007130829819340644e-6 ,-9.02440906309880051e-7 , -8.07202162400923876e-7 ,-7.20695163973628829e-7 ,-6.42244653300205630e-7 , -5.71217517781470294e-7 ,-5.07020818548399169e-7 ,-4.49099878304646022e-7 , -3.96936427770084668e-7 ,-3.50046810068755848e-7 ,-3.079802423881258831e-7 , -2.703171342203103740e-7 ,-2.366674614798822290e-7 ,-2.066691957770729959e-7 , -1.799867881095929772e-7 ,-1.563097062209422431e-7 ,-1.353510248579645359e-7 , -1.168460681455123146e-7 ,-1.005511032814468893e-7 ,-8.62420847407957527e-8 , -7.37134481637328051e-8 ,-6.27769530881390943e-8 ,-5.32605736738448247e-8 , -4.50074365522505363e-8 ,-3.78748049218792711e-8 ,-3.17331079975249390e-8 , -2.646501490803761135e-8 ,-2.196455212542670784e-8 ,-1.813626349587053951e-8 , -1.489441193139790908e-8 ,-1.216222180945688236e-8 ,-9.87116111630979836e-9 , -7.96026235919439909e-9 ,-6.37548126147088806e-9 ,-5.06909224453597014e-9 , -3.99911969012962562e-9 ,-3.128803966790610961e-9 ,-2.426101194634481865e-9 , -1.863215713335265403e-9 ,-1.416164209190671797e-9 ,-1.064370448442777918e-9 , -7.90289555613217877e-10 ,-5.79060767495804884e-10 ,-4.18187585631845309e-10 , -2.972442425757917232e-10,-2.076073900428560728e-10,-1.422119101172445236e-10, -9.53297440911970652e-11 ,-6.23706272023704837e-11 ,-3.97036115415826655e-11 , -2.449825371576637154e-11,-1.458433847332530848e-11,-8.32900443204479435e-12 , -4.53013329432016700e-12 ,-2.324859491701077721e-12,-1.112053071517674883e-12, -4.87624823499943125e-13 ,-1.914991446042941506e-13,-6.50969564375764837e-14 , -1.816812236901758798e-14,-3.81026123151067851e-15 ,-5.08621956521610674e-16 , -2.976901816632284619e-17,-2.325730956994801644e-19 }; class DoubleIntegral { private: // User-provided attributes of the integral. double a, b; // Outer interval of integration BOUNDARY_FUNCTION g, h; // Inner interval of integration INTEGRAND_FUNCTION f; // Integrand function double abs_tol; // Specified absolute accuracy requirement double rel_tol; // Specified relative accuracy requirement unsigned max_points; // Maximum number of abscissae permitted // Derived attributes of the integral (method independent). INTERVAL xdir; // Outer interval description INTERVAL ydir; // Inner interval description // Results of the evaluation of the integral (method dependent) // - initial values shown in parentheses. double cubature; // Computed value of the integral(0) double err_est; // Estimate of relative error in cubature(-1) int fun_vals; // Number of function values used(0) int ifail; // Failure indicator (-1): // ifail = 0 ...convergence achieved // ifail = 1 ...roundoff detected // ifail = 2 ...max_points reached // Data members used in evaluating the integral (method dependent). unsigned max_iters; // Maximum length of cubature sequence double *c; // Array of cubature approximations double *e; // Array of relative error estimates TRANSFORM x_transform, // Indicates type of transformation y_transform; // to be applied prior to evaluation BOOL radial_transform; // True if radial transform is to be applied double r, twoPIr2; // Used when the radial transform is invoked BOOL conservative; // Used in the error_estimate function BOOL approx_178; // Used in the error_estimate function // Member functions used for computing xdir and ydir and for initializing // values associated with the evaluation of the integral (method // independent). void set_region_type(); INTERVAL set_interval_type(BOOL, BOOL) const; TRANSFORM set_transform_type(INTERVAL) const; void set_initial_values(); // Member functions used in evaluating the integral (method dependent). void integrate(); double optimal_radius(INTEGRAND_FUNCTION); void core(); double generate_set(int, int); double displaced_fibonacci(int, int, int); void map_to_ab(double&, double&) const; void map_to_gh(double, double&, double&) const; void set_termination_flags(int, BOOL&, BOOL&, BOOL&); double error_estimate(int); double diff(int, int) const; double max_diff(int) const; double min_diff(int) const; double go_fer(double) const; public: // Constructors. DoubleIntegral(double req_rel_acc = DEFAULT_REL_TOL, double req_abs_acc = DEFAULT_ABS_TOL, unsigned max_evals = DEFAULT_MAX_POINTS); DoubleIntegral(double a, double b, BOUNDARY_FUNCTION g, BOUNDARY_FUNCTION h, INTEGRAND_FUNCTION f, double req_rel_acc = DEFAULT_REL_TOL, double req_abs_acc = DEFAULT_ABS_TOL, unsigned max_evals = DEFAULT_MAX_POINTS); // Copy constructor. DoubleIntegral(const DoubleIntegral& I); // Destructor. ~DoubleIntegral(); // Assignment operator. void operator =(const DoubleIntegral& I); // Modification member functions. void set_outer_interval(double a, double b); void set_inner_interval(BOUNDARY_FUNCTION g, BOUNDARY_FUNCTION h); void set_integrand(INTEGRAND_FUNCTION f); void set_abs_tol(double req_abs_error); void set_rel_tol(double req_rel_acc); void set_max_evals(unsigned max_evals); void set_new_integral(double a, double b, BOUNDARY_FUNCTION g, BOUNDARY_FUNCTION h, INTEGRAND_FUNCTION f); // Access functions. void get_outer_interval(double& a, double& b) const; void get_inner_interval(BOUNDARY_FUNCTION& g, BOUNDARY_FUNCTION& h) const; void get_integrand(INTEGRAND_FUNCTION& f) const; double get_rel_tol() const; double get_abs_tol() const; unsigned get_max_evals() const; double value() const; double rel_err_est() const; double abs_err_est() const; int evals() const; int error_flag() const; // Integral evaluation functions. double evaluate(); double evaluate(double req_rel_acc); double evaluate(double& rel_err_est, int& flag, int& evals); double evaluate(double a, double b, BOUNDARY_FUNCTION g, BOUNDARY_FUNCTION h, INTEGRAND_FUNCTION f, double& rel_err_est, int& flag, double req_rel_acc = DEFAULT_REL_TOL, double req_abs_acc = DEFAULT_ABS_TOL, unsigned max_evals = DEFAULT_MAX_POINTS); // Friend functions. friend BOOL infinite(double); friend double max(double, double); friend double max(double, double, double); friend double max(int, int); friend unsigned min(unsigned, unsigned); }; SHAR_EOF fi # end of overwriting check cd .. cd .. cd .. if test ! -d 'Doc' then mkdir 'Doc' fi cd 'Doc' if test -f 'Readme.txt' then echo shar: will not over-write existing file "'Readme.txt'" else cat << "SHAR_EOF" > 'Readme.txt' Comments on the use of the DoubleIntegral class. ----------------------------------------------- Written by Ian Robinson and Michael Hill Last updated: 23 April, 2001 This file contains comments on, and examples of, the use of a C++ class called DoubleIntegral. It includes a description of a C++ program called r2d2lri_sample.cpp for evaluating the given sample integrals. Output from the program is written to a file called r2d2lri_sample.out. The main purpose of the DoubleIntegral class is to evaluate double integrals of the form: b h(x) I I f(x,y) dy dx. a g(x) The method used for the evaluation of DoubleIntegrals of this form is described in the paper written by Michael Hill and Ian Robinson: "r2d2lri: An algorithm for automatic two-dimensional cubature", (submitted for publication). The definition of the class (along with a complete description of all the constructors and member functions) can be found in the file r2d2lri.h; its implementation is in the file r2d2lri.cpp. To evaluate a particular integral, one must first define the integral (in the form described below) and then use one of the "evaluate" functions contained in the file r2d2lri.cpp. Including the directive #include "r2d2lri.h" in a program is sufficient to make the DoubleIntegral class available to that program. To use the class, integrals must be defined in the form: const double a = ...; const double b = ...; double g(double x) {return (some function of x);} double h(double x) {return (some function of x);} double f(double x, double y) {return (some function of x and y);} For instance, the integral 1 x^2 I1 = I I x.exp(y) dy dx 0 0 could be defined as follows: const double a1 = 0.0; const double b1 = 1.0; double g1(double x) {return 0.0;} double h1(double x) {return x*x;} double f1(double x, double y) {return x*exp(y);} Any of a, b, g(x) and h(x) may be infinite. The value INFINITY = HUGE_VAL is defined in r2d2lri.h for this purpose. (If use of HUGE_VAL causes problems with some compilers, the definition of INFINITY could be changed to a large value, such as 10^30.) An example utilizing this value is the following integral over a semi-infinite domain: 0 oo dy dx I30 = I I ------------------- . -oo 0 sqrt(-xy).(y-x+1)^2 This integral might be coded as follows: const double a30 = -INFINITY; const double b30 = 0.0; double g30(double x) {return 0.0;} double h30(double x) {return INFINITY;} double f30(double x, double y) { double z1 = y - x + 1.0; z1 = z1*z1; if (z1 == 0.0) return 0.0; double z2 = -x*y; return z2 <= 0.0 ? 0.0 : 1.0/(z1 * sqrt(z2)); } (Integrals I1 and I30 are drawn from the Robinson and De Doncker testbed referred to in Hill, M. and Robinson, I., "d2lri: A non-adaptive algorithm for two-dimensional cubature", J.Comput.Appl.Math., 112, 1999, pp 121-145.) It must be remembered that access to the value INFINITY is available only to programs which contain the statement: #include "r2d2lri.h". There are a number of ways to now define the above sample integrals as members of the DoubleIntegral class in order to evaluate them. Here, we describe two straightforward methods of doing so. (Brief descriptions of all of the features of the class are given in the file r2d2lri.h.) 1. The following two statements suffice to evaluate a stand-alone integral to, say, 10 significant figures: DoubleIntegral I(a1,b1,g1,h1,f1); value = I.evaluate(0.5E-10); Calls to I.rel_err_est() and I.error_flag() then provide an estimate of the relative error in the computed value of the integral and an indication of the likely success of the algorithm, respectively. (A value other than zero for the error flag indicates that the requested accuracy may not have been achieved.) The same outcome to the above could be achieved with the statements: DoubleIntegral I; value = I.evaluate(a1,b1,g1,h1,f1,rel_err_est,error_flag,0.5E-10); In this case, the error estimate and error flag indicator are returned as rel_err_est and error_flag, respectively. 2. To evaluate more than one integral to, say, 8-figure accuracy, one could proceed as follows: DoubleIntegral J(0.5E-8); J.set_new_integral(a1,b1,g1,h1,f1); J.evaluate(); Output results for integral I1. J.set_new_integral(a30,b30,g30,h30,f30); J.evaluate(); Output results for integral I30. A full set of functions (for example, set_outer_interval, set_rel_tol, get_max_evals, etc) is available for accessing private member values of an object of type DoubleIntegral and for altering these values (either individually or in sensible groupings). (CAUTION: In C++, the statement cout << I.evaluate() << I.rel_err_est() << endl; has a different outcome to that of the two statements cout << I.evaluate(); cout << I.rel_err_est() << endl; In the first example, the member function rel_err_est() for the object I is called BEFORE the function evaluate() is called. The opposite order of evaluation occurs in the second example.) The file r2d2lri_sample.cpp contains a program which provides several examples of the use of the DoubleIntegral class and its associated algorithm, r2d2lri. Note that the file r2d2lri.h contains #include directives for the math.h and stdlib.h library header files. SHAR_EOF fi # end of overwriting check cd .. # End of shell archive exit 0