Seite 4 von 5

Verfasst: 10.07.2005 19:45
von Deeem2031
Die Lib hab ich übrigens ins ShowCase gestellt. Gestern Abend hab ich übrigens noch einen Bug der Library gefixt, der allerdings nicht von mir stammte, sondern auch in der alten Library war. Außerdem hab ich heut noch die Math-Library optimiert, auch wenn ich nicht viel rausholen konnte. Aber das ganze steht ja jetzt auch im ShowCase.

Verfasst: 10.07.2005 20:55
von MVXA
Ich versuch mich auch mal an was. (hier stand schon was, aber da hab ich ein Fehler entdeckt o_O)

Verfasst: 10.07.2005 23:18
von Deeem2031
So, Fred hats sich es jetzt endlich angeguckt :)

Verfasst: 11.07.2005 18:34
von remi_meier
Nur ein kleiner Tipp nebenbei für die, dies noch nicht wussten:
Ist schön, dass du RoundL() eingefügt hast, aber bis auf die Ausnahme 4.5
(es gibt noch weitere mit .5) kann das PB selbst auch:

Code: Alles auswählen

x.f = 4.55
y.l = x
Debug y
x.f = 4.500001
y.l = x
Debug y
x.f = 4.5
y.l = x
Debug y
x.f = 3.5
y.l = x
Debug y
x.f = 4.35
y.l = x
Debug y
Sowieso ist PBs Round-Funktion total unnütz :freak:

Verfasst: 11.07.2005 18:36
von Ynnus
Die Frage ist wohl, wie schnell das gecastete Runden im Vergleich zum Expliziten Runden ist. Vielleicht gibt es da ja erhebliche Geschwindigkeitsdifferenzen.

Verfasst: 11.07.2005 18:37
von remi_meier
Ja, gecastet sollte schneller sein :)

Verfasst: 11.07.2005 18:47
von Deeem2031
"gecastet" ? "explizit" ?
Was dasvon ist denn welches? ^^
Naja, rein vom Aufbau der Proceduren würde ich sagen das die RoundL-Procedure (also die, die zum näheren Ganzzahlwert rundet) schneller ist. Nicht weil ich die geschrieben habe, sondern weil die Procedure einen Long zurückgibt und keinen Float. Auch wenn sich das vielleicht unlogisch anhört ;)

Verfasst: 11.07.2005 18:53
von remi_meier
Ja, er meint mit gecastet Typecasting und explizit den Prozedurenaufruf.

Also wenn RoundL schneller sein soll, musst du schon was gezaubert haben,
was mich persönlich sehr interessieren würde :)
PBs Code:

Code: Alles auswählen

FLD    dword [v_x]
  PUSH   eax
  FISTP  dword [esp]
  POP    dword [v_y]
Da wird wohl der Prozedurenaufruf schon sehr viel wegnehmen!

Verfasst: 11.07.2005 18:55
von Deeem2031
Achso, na dann ist das natürlich schneller, auch wenn mir das ein bisl buggy aussieht *ein bischen rumtest*.

Verfasst: 11.07.2005 19:04
von Deeem2031
Wie ich es vermutet habe, mit ein bischen ändern der ControlFlags der FPU wird nichtmehr zum nächst, näheren Wert gerundet:

Code: Alles auswählen

!FNSTCW WORD[Esp-6]
!MOV AX,WORD[Esp-6]
!OR AH, 12
!MOV WORD[Esp-8],AX
!FLDCW WORD[Esp-8]

x.f = 4.8 
y.l = x 
Debug y

!FLDCW WORD[Esp-6]
Meiner Procedure würde das nichts ausmachen, weil die die Flags immer neu setzt.