]> www.ginac.de Git - ginac.git/blobdiff - check/time_gammaseries.cpp
location of C++ FAQ Lite has changed
[ginac.git] / check / time_gammaseries.cpp
index c92f29f7521309e2c5e09febfcf2794615a1a9ff..afb78395163f4efab5bd8f8288e2ea746dc2eaca 100644 (file)
@@ -3,7 +3,7 @@
  *  Some timings on series expansion of the Gamma function around a pole. */
 
 /*
- *  GiNaC Copyright (C) 1999-2000 Johannes Gutenberg University Mainz, Germany
+ *  GiNaC Copyright (C) 1999-2003 Johannes Gutenberg University Mainz, Germany
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
 
 #include "times.h"
 
-unsigned Gammaseries(unsigned order)
+unsigned tgammaseries(unsigned order)
 {
-    unsigned result = 0;
-    symbol x;
-    
-    ex myseries = series(Gamma(x),x==0,order);
-    // compute the last coefficient numerically:
-    ex last_coeff = myseries.coeff(x,order-1).evalf();
-    // compute a bound for that coefficient using a variation of the leading
-    // term in Stirling's formula:
-    ex bound = evalf(exp(ex(-.57721566490153286*(order-1)))/(order-1));
-    if (evalf(abs((last_coeff-pow(-1,order))/bound)) > numeric(1)) {
-        clog << "The " << order-1
-             << "th order coefficient in the power series expansion of Gamma(0) was erroneously found to be "
-             << last_coeff << ", violating a simple estimate." << endl;
-        ++result;
-    }
-    
-    return result;
+       unsigned result = 0;
+       symbol x;
+
+       ex myseries = series(tgamma(x),x==0,order);
+       // compute the last coefficient numerically:
+       ex last_coeff = myseries.coeff(x,order-1).evalf();
+       // compute a bound for that coefficient using a variation of the leading
+       // term in Stirling's formula:
+       ex bound = exp(-.57721566490153286*(order-1))/(order-1);
+       if (abs((last_coeff-pow(-1,order))/bound) > 1) {
+               clog << "The " << order-1
+                    << "th order coefficient in the power series expansion of tgamma(0) was erroneously found to be "
+                    << last_coeff << ", violating a simple estimate." << endl;
+               ++result;
+       }
+
+       return result;
 }
 
-unsigned time_gammaseries(void)
+unsigned time_gammaseries()
 {
-    unsigned result = 0;
-    
-    cout << "timing Laurent series expansion of Gamma function" << flush;
-    clog << "-------Laurent series expansion of Gamma function:" << endl;
-    
-    vector<unsigned> sizes;
-    vector<double> times;
-    timer omega;
-    
-    sizes.push_back(10);
-    sizes.push_back(15);
-    sizes.push_back(20);
-    sizes.push_back(25);
-    
-    for (vector<unsigned>::iterator i=sizes.begin(); i!=sizes.end(); ++i) {
-        omega.start();
-        result += Gammaseries(*i);
-        times.push_back(omega.read());
-        cout << '.' << flush;
-    }
-    
-    if (!result) {
-        cout << " passed ";
-        clog << "(no output)" << endl;
-    } else {
-        cout << " failed ";
-    }
-    // print the report:
-    cout << endl << "    order: ";
-    for (vector<unsigned>::iterator i=sizes.begin(); i!=sizes.end(); ++i)
-        cout << '\t' << (*i);
-    cout << endl << "    time/s:";
-    for (vector<double>::iterator i=times.begin(); i!=times.end(); ++i)
-        cout << '\t' << int(1000*(*i))*0.001;
-    cout << endl;
-    
-    return result;
+       unsigned result = 0;
+
+       cout << "timing Laurent series expansion of Gamma function" << flush;
+       clog << "-------Laurent series expansion of Gamma function:" << endl;
+
+       vector<unsigned> sizes;
+       vector<double> times;
+       timer omega;
+
+       sizes.push_back(10);
+       sizes.push_back(15);
+       sizes.push_back(20);
+       sizes.push_back(25);
+
+       for (vector<unsigned>::iterator i=sizes.begin(); i!=sizes.end(); ++i) {
+               omega.start();
+               result += tgammaseries(*i);
+               times.push_back(omega.read());
+               cout << '.' << flush;
+       }
+
+       if (!result) {
+               cout << " passed ";
+               clog << "(no output)" << endl;
+       } else {
+               cout << " failed ";
+       }
+       // print the report:
+       cout << endl << "       order: ";
+       for (vector<unsigned>::iterator i=sizes.begin(); i!=sizes.end(); ++i)
+               cout << '\t' << (*i);
+       cout << endl << "       time/s:";
+       for (vector<double>::iterator i=times.begin(); i!=times.end(); ++i)
+               cout << '\t' << int(1000*(*i))*0.001;
+       cout << endl;
+       
+       return result;
 }