/* * Rechnernnutzung in der Physik, WS 2011/12, Blatt 4, Aufgabe 9 * * einige Beispielrechnungen mit GMPlib zur Demo * Ziel: 100 Stellen von Euler e berechnen */ #include #include #include using namespace std ; int main(void) { // Mindestanzahl der Mantissen-Bits der "multi precision floats" setzen. // Damit auf jeden Fall ausreichend Platz fuer 100 Stellen. mpf_set_default_prec(1024) ; cout << "Info: Default precision of gmp floats is " << mpf_get_default_prec () << endl ; // Vereinbaren von "multi-precision" Variablen mpf_class x ; mpf_class y ; // ne kleine Rechnung, die mit "double" ziemlich daneben ginge... x = 1.0 ; y = 1e-50 ; x += y ; x -= 1.0 ; cout << setprecision(100) << x << endl ; // Zum Ueberlegen: // 1. Was kaeme mit "double" raus? // 2. (kniffliger): Warum ist denn das Ergebnis immernoch mit // einem relativen Fehler von etwa 10^-16 behaftet? // ein Beispiel mit der Klasse fuer ganze Zahlen, 2^64 berechnen mpz_class z(1) ; for( int i=0; i<64; i++) z*=2 ; cout << setprecision(100) << z << endl ; // Doku von GMP: http://gmplib.org/manual/ (insbes. C++-Abschnitt) }