C :: Aufgabe #188 :: Lösung #1
1 Lösung
#188
Babylonisches Wurzelziehen / Heron-Verfahren / Heronsches Näherungsverfahren
Anfänger - C
von Gelöschte Person
- 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
~ Viel Spaß :)
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
von BSpinoza (60 Punkte)
- 04.03.2021 um 19:29 Uhr
/***
+----------------------+
| |
| 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
Seite 1 von 0
1
