Wie Arbeitet CompareMemory() ??

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag 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.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Ich versuch mich auch mal an was. (hier stand schon was, aber da hab ich ein Fehler entdeckt o_O)
Bild
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

So, Fred hats sich es jetzt endlich angeguckt :)
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag 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:
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

Die Frage ist wohl, wie schnell das gecastete Runden im Vergleich zum Expliziten Runden ist. Vielleicht gibt es da ja erhebliche Geschwindigkeitsdifferenzen.
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Ja, gecastet sollte schneller sein :)
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag 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 ;)
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag 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!
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Achso, na dann ist das natürlich schneller, auch wenn mir das ein bisl buggy aussieht *ein bischen rumtest*.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag 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.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Antworten