Michael Habbe hat für den obigen Code einige Verbesserungen:
Die Wurzel wird zwar auch berechnet, aber es ist nicht das Verfahren nach Heron, es werden auch mehr Durchläufe benötigt. Auch kann man Wurzeln negativer Zahlen ermitteln, was ja bekanntlich nicht funktioniert (
)
Und zwar müssten die Zeilen 24+25 des ersten Quelltextes und die Zeilen 23+24 der Funktion getauscht werden mit Abänderung der Ausgabe der Variablen.
Alternativ kann auch der Code verwendet und die Originale ersetzt werden (der Startwert wird auf 1 gesetzt):
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
a, r: Double;
i: Integer;
begin
r := StrToFloat(Edit1.Text); // Die Zahl, aus der die Wurzel ermittelt wird
a := 1; // Startwert
for i := 1 to StrToInt(Edit2.Text) do // Anzahl der Annäherungsdurchläufe
begin
a := 0.5 * (a + r/a); // Heron-Verfahren
end;
Edit3.Text := FloatToStr(a); // Anzeige Wurzel der Zahl
Edit4.Text := FloatToStr(a*a); // Anzeige der Berechneten Zahl zum Quadrat zum überprüfen der Genauigkeit
Edit5.Text := FloatToStr(sqrt(r)); // Ausgabe der "richtigen" Wurzel
end;
Oder als Funktion:
Delphi-Quellcode:
function SqrtHeron(r: Double; anz: Integer): Double;
var
i: Integer;
begin
result := 1; // Startwert
for i := 1 to anz do // Anzahl der Annäherungsdurchläufe
begin
result := 0.5 * (result + r/result); // Heron-Verfahren
end;
end;
Hier:
http://www.arndt-bruenner.de/mathe/s...heronframe.htm findet man nützliche Informationen, auch wie man die n.te Wurzel mit diesem Verfahren berechnen kann.