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;
}
Esempio n. 2
0
 //avoid public virtual function        
 void integrate() {
   doIntegrate();
 }