int main(int argc, char **argv) { double start, end; QuadType quadType = QT_Gaussian; int levels = 0; int primaryPrecision = PRIMARY_PRECISION_DEF; int secondaryPrecision = SECOND_PRECISION_DEF; // gather command line options extern char *optarg; int arg; while ((arg = getopt(argc, argv, "getp:h")) != -1) { switch (arg) { case 'g': quadType = QT_Gaussian; break; case 'e': quadType = QT_ErrFunc; break; case 't': quadType = QT_TanhSinh; break; case 'p': primaryPrecision = atoi(optarg); secondaryPrecision = primaryPrecision * 2; break; default: case 'h': usage(argv); } } if(optind != argc) { usage(argv); } start = currentTime(); mp::mp_init(secondaryPrecision); mp::mpsetoutputprec(primaryPrecision); mp_real pi; doIntegrate(circleFunc, 0, 1, quadType, primaryPrecision, secondaryPrecision, pi); end = currentTime(); std::cout << "\npi = " << (pi * 4.0) << "\n"; std::cout << "total elapsed time : " << (end - start) << " seconds\n"; return 0; }
//avoid public virtual function void integrate() { doIntegrate(); }