Department of Computer Science | Institute of Theoretical Computer Science | CADMO

Theory of Combinatorial Algorithms

Prof. Emo Welzl and Prof. Bernd Gärtner

// Programm: newton.C // Berechnet Quadratwurzelm mittels Newton-Iteration. #include int main() { // Eingabe std::cout << "Berechnung der Quadratwurzel von n," << " n > 0. Eingabe n :? "; double n; std::cin >> n; // Newton-Iteration: x_{i+1} = 1/2 (x_i + n/x_i) // Um sicherzustellen, dass der Algorithmus terminiert, // halten wir eine untere Schranke fuer den aktuellen // Approximationswert aufrecht. Diese Schranke wird // hochgesetzt, wann immer der folgende Wert groesser // wird als der aktuelle. Auf diese Weise wird ein // etwaiger Zyklus erkannt und abgebrochen. double curr = n; // aktueller Wert double prev = 0; // voriger Wert double lb = 0; // untere Schranke unsigned int counter = 0; // Anzahl Iterationen do { ++counter; if (curr > prev) lb = prev; prev = curr; curr = (prev + n / prev) / 2; } while (curr != prev && curr > lb); // Ausgabe std::cout << "Approximation der Quadratwurzel aus " << n << " ist: " << curr << "\nApproximationsfehler des Quadrats ist " << curr * curr - n << "." << "\nAnzahl der Iterationen war " << counter << "." << std::endl; }