Einzelnen Beitrag anzeigen

CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Wurzeln in beliebiger Genauigkeit berechnen

  Alt 23. Jul 2006, 15:21
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.
  Mit Zitat antworten Zitat