Entwickler-Ecke
Sonstiges (Delphi) - Heron-Verfahren zur Annäherung an Quadratwurzeln
Delete - Sa 30.08.03 14:25
Titel: Heron-Verfahren zur Annäherung an Quadratwurzeln
Da das Heron-Verfahren relativ interessant & einfach zu schreiben ist, habe ich hier einmal den Quellcode :
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| function InitialValueForHeron(a : Extended): Extended; var i : integer; begin i := 2; repeat Result := Power(i,2); Inc(i); until Power(i,2) >= a end;
function heronAlgorithm(xN,a : extended; rounds : integer): extended; var i : integer; begin for i := 1 to rounds do begin xN := (xN + a/xN) / 2; end; result := xN; end; |
Nätürlich lässt sich das ganze auch mit sqrt(x) per Delphi-Interner Funktion machen, aber wo bleibt da die Herausforderung :wink: ?
Paul
FeG - Sa 30.08.03 15:23
Titel: Re: Heron-Verfahren zur Annäherung an Quadratwurzeln
Hi,
Hast du jetzt dazu eine Frage, oder ist das einfach nur so??
PaulG hat folgendes geschrieben: |
Nätürlich lässt sich das ganze auch mit sqrt(x) per Delphi-Interner Funktion machen, aber wo bleibt da die Herausforderung :wink: ? |
Ähhh... Warum hast du's dann gepostet, wenn's ne Herausforderung sein soll???
MfG,
FeG
Terra23 - Sa 30.08.03 15:26
@FeG: Wenn ich richtig vermute, wollte er das als FAQ-Beitrag schreiben und von den Usern hier bewerten lassen..
Delete - Sa 30.08.03 17:37
Jup. Bin leider im Forum "verrutscht".
FeG - Sa 30.08.03 18:02
Terra23 hat folgendes geschrieben: |
@FeG: Wenn ich richtig vermute, wollte er das als FAQ-Beitrag schreiben und von den Usern hier bewerten lassen.. |
Axo... da bin ich gar nicht drauf gekommen, bin noch neu hier...
Aber jetzt die Bewertung: :wink:
Ich find, FAQ wär's, wenn man sqrt() reinschreibt... der Heron-Algorithmus ist eher was zum Tüfteln und selber probieren. Wenn jemand eine Wurzelfunktion braucht, soll er/sie lieber sqrt() verwenden...
Sonst müsste man's als Tutorial nehmen und dann den Aufbau des Algos Schritt für Schritt erklären...
Oder wie seht ihr das?
MfG,
FeG
Delete - Sa 30.08.03 18:27
Ok ok also nochmal erklärt damit alle zufrieden sind :lol:
Ich gebs ja zu, nur für die interresant die auch mal andere Verfahren probieren wollen
InitialValueForHeron berechnet einen passenden Startwert für den Heron-Algorithmus :
A stellt den Radikanden dar. Wir wollen nun eine ganzahlige Näherung für den Radikanden finden.
Der Zähler i hat den Startwert 2, dann wird i^2 genommen, i inkrementiert, solange bis das i + 1 (also Inc(i)) größer oder gleich a ist.
Da bei der until-Abfrage nichts zugewiesen wird, gilt dann als Ergebnis das vorherige a.
Damit sind alle Vorbereitungen abgeschlossen :
Der Startwert ist x[0] := InitialValueForHeron(a).
Der Radikand a bleibt bestehen, es wird auch die Rundenanzahl (Genauigkeit) Rounds zugewiesen
Heron-Algorithmus :
Was jetzt passiert ist eine Mittelwertsannäherung des Radikands A
xN := (xN + a/xN) / 2
und das verpackt in eine For-Schleife, die zu der Rundenanzahl hochzählt.
Bei großen Extended-Zahlen reichen bereits 40 Runden und Delphi rundet den Näherungswert xn zu xN^2 = a.
mfG
Paul
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!