Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Fließkommazahl oder Ganzzahl schneller zu berechnen ?

  Alt 5. Jun 2005, 15:39
@dizzy: Ich dachte, Extended ist der native Datentyp der FPU. Dann wäre Extended am Schnellsten... Ich habe hier mal ein Testprogramm geschrieben.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var
  i : Integer;
  s : Single;
  r : Real;
  e : Extended;
  t : Cardinal;
begin
  s := 0;
  t := GetTickCount;
  For i:=1 To 1000000 do s:= s+ sin(i)*s/i;
  memo1.lines.add ('Single : '+IntToStr (GetTickCount - t)+' '+FloatToStr (s));
  r := 0;
  t := GetTickCount;
  For i:=1 To 1000000 do r := r+ sin(i)*r/i;
  memo1.lines.add ('Real : '+IntToStr (GetTickCount - t)+' '+FloatToStr (r));
  e := 0;
  t := GetTickCount;
  For i:=1 To 1000000 do e := e+ sin(i)*e/i;
  memo1.lines.add ('Extended : '+IntToStr (GetTickCount - t)+' '+FloatToStr (e));
end;
Danach wäre Extended #1, gefolgt von real, dann single. Lässt man den trigonometrischen Müll weg, ist Real#1, Extened #2. Scheint also auch auf die verwendeten Funktionen anzukommen (wer hätte das gedacht)...

Wenn Du Integer für Realzahlbrechnungen benutzen willst, dann definierst Du dir einfach willkürlich die Anzahl der Nachkommastellen. Das ist dann nicht mehr 'floating' point, sondern einfach 'fixed' point. Arithmetik. Bei den Grundrechenarten ist das völlig transparent, weil es ja egal ist, ob ich 1,2345 - 5,678 oder 12345 - 56780 rechne. Bei Division gibt es dann Probleme. Wenn ich fest 5 Dezimalstellen habe, und 2,00000 / 1,0000 rechnen will, wären das mit der fixed point Schreibweise 200000/100000=2 ==> 0,00002 . Also völliger Blödsinn. Da
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat