C :: Aufgabe #188

1 Lösung Lösung öffentlich

Babylonisches Wurzelziehen / Heron-Verfahren / Heronsches Näherungsverfahren

Anfänger - C von Exception - 03.06.2018 um 08:27 Uhr
Die zu schreibende Anwendung soll eine positive Zahl entgegennehmen und durch das Heron-Verfahren näherungsweise die Quadratwurzel berechnen.

Zusatz:
Es werden die einzelnen Schritte ausgegeben, siehe Beispiel.

Beispiel: mit Wurzel aus 12

...
Die Wurzel aus 12 ist zwischen 3.5 und 3.4
...
Die Wurzel aus 12 ist zwischen 3.45 und 3.46
...


~ Viel Spaß :)

Lösungen:

vote_ok
von BSpinoza (60 Punkte) - 04.03.2021 um 19:29 Uhr
Quellcode ausblenden C-Code
/***

  +----------------------+
  |                      |
  |  Programm: Heron.c   |
  |                      |
  +----------------------+
  written 04.03.2021 
  by BSpinoza aka Bruno Schäfer, Losheim am See, Germany
  *
  * ************************************************************************************************************
  *   Bei der Heron-Methode zur Wurzelberechnung (Babylonisches Wurzelziehen), das dem griechischen Mathematiker
  *   Heron von Alexandria zugeschrieben wird, handelt es sich um ein Verfahren zur Approximation von 
  *   Quadratwurzeln, das folgendermaßen funktioniert:
  *
  *         Falls sqrt(a) = b, dann ist b^2 = a und es gilt:
  *         a/b = a / sqrt(a) = sqrt(a), da (a/b)^2 = a^2 / b^2 = a^2 / a = a.
  *         b = sqrt(a)  => a/ b = sqrt(a);     b  < sqrt(a) => a/b > sqrt(a);  b  > sqrt(a) => a/b > sqrt(a)
  *         Der Mittelwert aus b und a/b liegt viel näher an sqrt(a) als b und a/b selbst.
  *         Die mehrmalige Durchführung dieser besseren Näherung führt dann in wenigen Schritten
  *         zu dem exakten Wert der Quadratwurzel.
  *         Zum Vergleich berechnet das Programm die Quadratwurzel mittels der C-Funktion sqrt().
  *
  ****************************************************************************************************************/

#include <stdio.h>
#include <math.h>
int main()
{
    double a, b, z, t;
    int i;
    printf("/nHenon-Verfahren (Babylonisches Wurzelziehen)\n\n");
    printf("Zahl eingeben: ");
    scanf("%lf", &a);
    b = a / 2.0;     /*   Startwert */
    printf("\nStartwert: %f (= Naeherungswert Nr. 0)\n",  b);
    for(i = 1; i <= 50; i++)
    {
        t = a / b;
        z = (b + t) / 2.0;
        if (fabs(z-b) < 0.00000000001)   /* Abbruchbedingung der for-Schleife   */
            break;
        b = z;
        printf("Naeherungswert Nr. %i: \t%.9lf\n", i, b);
    }
    printf("\nBerechnung mit math. Funktion: \nsqrt(%lf) =\t%.9lf\n", a, sqrt(a));
    return 0;
}
2099190

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.