Autor Beitrag
PaulG
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 30.08.03 14:25 
Da das Heron-Verfahren relativ interessant & einfach zu schreiben ist, habe ich hier einmal den Quellcode :
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 77

Win XP Home, SuSE Linux 8.2 Prof
D3 Prof, D7 Prof
BeitragVerfasst: Sa 30.08.03 15:23 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: 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..

_________________
Hasta La Victoria Siempre
PaulG
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 30.08.03 17:37 
Jup. Bin leider im Forum "verrutscht".
FeG
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 77

Win XP Home, SuSE Linux 8.2 Prof
D3 Prof, D7 Prof
BeitragVerfasst: 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
PaulG
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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