Modulo-Funktion

Anfängerfragen zum Programmieren mit PureBasic.
DarkCrow
Beiträge: 18
Registriert: 04.01.2005 16:35
Wohnort: Altrip
Kontaktdaten:

Modulo-Funktion

Beitrag von DarkCrow »

Hallo PB-Gemeinde,

ich hab mal wieder ein Problem das mich schon mehrere Tage beschäftigt :)

Mein Problem ist, das ich eine schnellere Modulo-Funktion bräuchte ...

Meine Idee war die Modulo Funktion selbst zu schreiben:

ca. so: (zahl1/zahl2-Int(zahl1/zahl2))*zahl2

und hier mein PB-Test-Proggi :D

Code: Alles auswählen

NewList MyList.l()

For i.l = 1 To 10000000
  AddElement(MyList())
  MyList() = i
Next

; PureBasic-Modulo-Funktion-Funktionstest
temp.l = 0
ResetList(MyList())
puretick.l = GetTickCount_()
For i.l = 1 To CountList(MyList())
  NextElement(MyList())
  temp = (MyList() % 13)
Next

; Meine-Modulo-Funktion-Funktionstest
temp.l = 0
ResetList(MyList())
mytick.l = GetTickCount_()
For i.l = 1 To CountList(MyList())
  NextElement(MyList())
  f1.f = MyList() / 13
  temp = (f1-Int(f1))*13
Next

MessageRequester("Ergebnis","PureBasic-Modulo-Funktion: " + Str((GetTickCount_() - puretick)) +"msec." + #CRLF$ + "My-Modulo-Funktion: " + Str((GetTickCount_() - mytick)) +"msec.")
gibt es eine noch schnellere Möglichkeit?

Hier meine Ergebnisse:
Athlon XP +1800 (1.54Ghz)
512 MB Ram
Windows XP
Test 1:
PBModulo: 1250msec.
myModulo: 640msec.
Test 2:
PBModulo: 1266msec.
myModulo: 641msec.
Test 3:
PBModulo: 1297msec.
myModulo: 688msec.


Dell PowerEdge 1420
1GB Ram
Windows Server 2003 Standard
Test 1:
PBModulo: 703msec.
myModulo: 437msec.
Test 2:
PBModulo: 688msec.
myModulo: 422msec.
Test 3:
PBModulo: 703msec.
myModulo: 437msec.


gruß Markus
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

ich hoffe du hast auch mal einen test ohne debugmodus laufen lassen, der bremst nämlich die pb funktionen beachtlich.
DarkCrow
Beiträge: 18
Registriert: 04.01.2005 16:35
Wohnort: Altrip
Kontaktdaten:

Beitrag von DarkCrow »

jab ... die Tests sind ohne Debug Funktion :cry:
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Modulo-Funktion

Beitrag von Danilo »

DarkCrow hat geschrieben:gibt es eine noch schnellere Möglichkeit?
Das Mod von PB (%) ist schneller als Deine Methode. Du stoppst
puretick.l und mytick.l aber beide erst im MessageRequester am
Ende. Das heißt Dein puretick beinhaltet immer PB Mod + Dein Mod,
ist also logischerweise langsamer als nur Dein Mod. :D

Da Floats nicht genau sind, habe ich auch starke Zweifel das
Deine Vorgehensweise überhaupt dafür geeignet ist.
PB verwendet für Mod bestimmt IDIV, also vorzeichenbehaftete
Division in ASM. Bei DIV und IDIV wird nicht nur das Ergebniss,
sondern auch der Rest der Division, zurückgegeben. Bei 32-bit
in EDX, bei 16-bit in DX, bei 8-bit in AH.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Wenn man den 2. Wert vom ersten abzieht sieht man aber doch was schneller ist.
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

Batze hat geschrieben:Wenn man den 2. Wert vom ersten abzieht sieht man aber doch was schneller ist.
In Deinem 1.Beitrag sieht es so aus als wenn Du meinst
Dein Mod sei schneller, da Du Dich so freust und fragst
was es noch schnelleres gibt.
Deshalb dachte ich Du meinst Deine Methode wäre doppelt
so schnell wie PB. Sehr komische Ergebnissanzeige, denn
dort steht nicht das man den zweiten Wert beim Ersten
abziehen soll. Dort stehen 2 Ergebnisse in msec.

Mach einfach weiter so. Geht mich ja nix an, wenn Du das
absichtlich so blöd machst um die Leute zu verarschen. ;)
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

@Danilo: Das Programm hab ich doch garnicht gepostet das war Dark Crow. /:->

Ich wollte nur sagen dass man trotzdem die korrekten Werte ablesen kann, was er natürlich auch hätte machen (am besten auch einbauen) sollen.
Danilo hat geschrieben: Geht mich ja nix an, wenn Du das
absichtlich so blöd machst um die Leute zu verarschen. :wink:
Das wollen wir ihm doch nicht vorwerfen. Lieber Unwissenheit. :wink:
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

Batze hat geschrieben:@Danilo: Das Programm hab ich doch garnicht gepostet das war Dark Crow. /:->
Nur hör' endlich auf mich zu verarschen! :lol:

Habs gerade schon gecheckt. ;)
Dachte das war wieder der original Fragesteller, da er ja 2
Minuten vor mir auch schon geantwortet hatte. Kann also
immernoch sein das dies ein Fehler von DarkCrow war und
er meinte sein Mod ist schneller.
Was mußt Du Dich da auch einmischen? ;) :D
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
DarkCrow
Beiträge: 18
Registriert: 04.01.2005 16:35
Wohnort: Altrip
Kontaktdaten:

Beitrag von DarkCrow »

oh man ... ich bin doch ein depp :oops:

sorry leuts ... :(
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@Dark Crow

siehst mal so: genau dieser Fehler wird die niemals wieder passieren..


wozu brauchst du denn das modulo?

wenn du deine datenbeschaffenheit so einrichten kannst, daß dir 2er potenzen genügen,
fährts du gut mit einem AND, was natür extrem viel schneller ist.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten