Die folgende Funktion hab ich zur Berechnung einer Wurzel auf X Stellen genau geschrieben.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| function GetSqrt(Number, Stellen: Integer): String; var TempInt: Extended; EndZahl: Integer; TempStr: String; X, Y: Integer; begin TempStr := '1,'; EndZahl := 0;
X := 1; while (X < Number div 2) AND (sqr(X) < Number) do begin TempStr := IntToStr(X - 1) + ','; inc(X); end;
for X := 1 to Stellen do begin Y := 1; while (sqr(StrToFloat(TempStr + IntToStr(Y))) < Number) AND (Y < 10) do inc(Y); EndZahl := Y - 1;
TempStr := TempStr + IntToStr(EndZahl); end;
Result := TempStr; end; |
Es werden 1000 Nachkommastellen in 31 Millisekunden (vor Optimierung: 47 Millisekunden).
Es gibt hier 2 Probleme:
1. Ich kann maximal 23 Stellen ausgeben (Extended) und die letzten Stellen sind nicht mehr korrekt.
2. Durch
IntToStr und
StrToInt geht eine Menge Zeit verloren.
Lösungen:
1. Hier werde ich mir die Unit von BenBe mal anschauen.
2. Das wollte ich euch jetzt Fragen, wie ich das ohne String löse.
Und bitte kommt mir nicht wieder mit irgendwelchen anderen Funktionen.
Ich möchte diese hier optimieren und nicht eine ganz anderen Funktion.
Danke
Gruß
GTA-Place
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)