Hi, hier ein Algorithmus zur Berechnung von Wurzeln ohne
Unit "Math" in beliebiger Genauigkeit nach Heron:
Formel des Heron:
http://lamp.clausvb.de/images/heron-formel.gif
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
i, j: integer;
x, y, wurzel: real;
begin
Wurzel := StrToFloat(edit1.text); //Wurzel ist die Zahl uas der die Wurzel gezogen werden soll
I:=0; //I und J für die Berechnung gebraucht
J:=0;
while j=0 do //Berechnen von J
begin
inc(I);
inc(J);
if I*I < Wurzel/2 then j:=0; //Solange I² kleiner Wurzel-halbe ist die Schleife wiederholen
end;
x:=i;
y:=wurzel;
i:=0;
while I<StrToInt(edit2.text) do //edit2 ist die Genauigkeit sprich Anzahl der Durchläufe
begin
inc(i);
y:=(x+y)/2; //An die Wurzel herantasten
x:=Wurzel/y;
end;
edit3.text:=FloatToStr(x); //Anzeige Wurzel der Zahl
edit4.text:=FloatToStr(x*x); //Anzeige der Berechneten Zahl zum ² zum überprüfen der Genauigkeit
end;
Chakotay1308 hat den Code in eine eigene Funktion gepackt und somit von der Oberfläche los gelöst:
Delphi-Quellcode:
// Wurzel(n) mit acc Durchläufen nach Heronverfahren berechnen
function SqrHeron(n: real; acc: integer): real;
var
i, j: integer;
y: real;
begin
i := 0;
j := 0;
while j = 0 do
begin
inc(i);
inc(j);
if i*i < (n/2) then j := 0;
end;
Result := i;
y := n;
i := 0;
for i := 0 to acc do
begin
y := (Result+y)/2;
Result := n/y;
end;
end;
[edit=Chakotay1308]Code-Style angepasst und eigenen Code druntergesetzt. Mfg, Chakotay1308[/edit]