C :: Aufgabe #188 :: Lösung #1

1 Lösung Lösung öffentlich
#188

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ß :)
#1
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;
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
2100396

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.