AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi (Division-/string-)Funktion weiter optimieren?

(Division-/string-)Funktion weiter optimieren?

Ein Thema von Nothine · begonnen am 5. Jan 2005 · letzter Beitrag vom 7. Jan 2005
Antwort Antwort
Benutzerbild von Nothine
Nothine

Registriert seit: 3. Jul 2004
Ort: Mülheim an der Ruhr
198 Beiträge
 
Delphi 5 Enterprise
 
#1

(Division-/string-)Funktion weiter optimieren?

  Alt 5. Jan 2005, 13:22
moin zusammen,
hab mal versucht ne funktion zu schreiben die 2 Integer-Werte dividiert und das ergebnis auf (mehr oder weniger) beliebig viele nachkommastellen ausgiebt.

schön und gut soweit, scheint auch alles zu laufen, aber ab so >20000 nachkommastellen wird's dann doch etwas langsam (25000 nachkommastellen = ~1200 ticks), zu dem zwecke wollte ich fragen ob jemand noch ideen hat wie man diese funktion weiter optimieren kann.

und wenn ihr dann noch mehr zeit für mich aufbringt könnte mir jemand einen denkanstoß geben wie man so ne art default-länge berechnen kann, bspw. 1/8 = 0.125 = 3 nachkommastellen (das is aber glaub ich nur was für die ganz hartgesottenen )

naja, hier die funktion (falls es fragen gibt was was macht... fragt):
Delphi-Quellcode:
function DivStr(const X,Y: Integer; const Precision: Cardinal): string;
  procedure StrMove(var Dest: string; const Source: string; Count: Cardinal);
  asm
    PUSH ESI
    PUSH EDI
    MOV ESI,EDX
    MOV EDI,[EAX]
    REP MOVSB
    POP EDI
    POP ESI
  end;
  function ModDiv(var X: Integer; const Y: Integer): Integer;
  asm //faster than computing mod and div seperately | note: Result := X div Y !
    PUSH ECX
    PUSH EDX
    MOV ECX,EAX
    MOV EAX,[EAX]
    CDQ
    IDIV DWORD PTR [ESP]
    MOV [ECX],EDX
    POP EDX
    POP ECX
  end;
var C,L: Cardinal;
    I: Integer;
    S: string;
begin
  S := IntToStr( X div Y );
  L := Length(S);
  SetLength(Result,L + Precision + Byte(Precision <> 0));
  StrMove(Result,S,L);
  if Precision = 0 then Exit;
  Result[L+1] := '.';
  I := X mod Y;
  for C := 1 to Precision do begin
    I := I * 10;
    Result[L+C+1] := Char( Abs( ModDiv(I,Y) ) + 48);
  end;
end;
if ThisPost is senseless then
ThisPost.WasPostedBy := SomeoneElse();
  Mit Zitat antworten Zitat
Benutzerbild von Nothine
Nothine

Registriert seit: 3. Jul 2004
Ort: Mülheim an der Ruhr
198 Beiträge
 
Delphi 5 Enterprise
 
#2

Re: (Division-/string-)Funktion weiter optimieren?

  Alt 7. Jan 2005, 11:50
keiner ne idee?
if ThisPost is senseless then
ThisPost.WasPostedBy := SomeoneElse();
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz