X * X vs. X ^ 2

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Fetze

Betreff: X * X vs. X ^ 2

BeitragMo, Aug 01, 2005 18:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

Hab gerade etwa mit Blitzmax herumgespielt und versucht, meine Function zur Entfernungsberechnung zu optimieren. Nach ner Weile ist mir dann eingefallen, dass ich irgendwo mal gelesen hatte, x*x sei schneller als x^2, ich war mir aber nicht mehr sicher, ob das auch für Blitzmax galt. Also hab ich mir folgendes Testprogramm geschrieben, um herauszufinden, was denn nun schneller ist.

BlitzBasic: [AUSKLAPPEN]

Strict
Graphics 640,480,0

Global fX:Float
Global fA:Float = 2.7457635
Global iTestNum=100

Global iLoop
Global iTestCount
Global iElapsed1
Global iElapsed2
Global iFinal1
Global iFinal2

WaitKey
For iTestCount = 1 To iTestNum
iElapsed1 = MilliSecs()
For iLoop = 1 To 100000
fX = fA * fA
Next
iElapsed1 = MilliSecs() - iElapsed1
iFinal1:+ iElapsed1

iElapsed2 = MilliSecs()
For iLoop = 1 To 100000
fX = fA ^ 2
Next
iElapsed2 = MilliSecs() - iElapsed2
iFinal2:+ iElapsed2
Next

Print Float(iFinal1) / Float(iTestNum)
Print Float(iFinal2) / Float(iTestNum)
Flip

WaitKey


Das Testergebnis hat mich dann doch ziemlich überrascht. Hier die Mittelwerte, der 100 durchgeführten Tests:

Mit Debug:
X * X ----> 2.74000001
X ^ 2 ----> 27.6100006

Ohne Debug:
X * X ----> 0.310000002
X ^ 2 ----> 25.2800007


Falls niemand einen Fehler in meinem Testprogramm entdeckt, rate ich jedem, Potenzrechnungen wenn möglich lieber auszuschreiben *g*

stfighter01

BeitragMo, Aug 01, 2005 19:26
Antworten mit Zitat
Benutzer-Profile anzeigen
kann ich mir schon vorstellen, der potenzieralgo ist wesentlich komplexer als eine multiplikation.
aber ich findes es auch blöd das diese spezialfälle nicht abgecheckt werden.
vielleicht kommt es aber noch in einer neuen version.

mfg stfighter
Denken hilft!

rema

BeitragMo, Aug 01, 2005 20:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Der C-Compiler optimiert je nach Optimirungsstufe solche Fälle.

Aber ein Bug oder so ist dies nicht. Da muss man selber Hand anlegen.

Fetze

BeitragDi, Aug 02, 2005 0:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Aber ein Bug oder so ist dies nicht. Da muss man selber Hand anlegen.


Deswegen melde ich das ja *g*

TheShadow

Moderator

BeitragDi, Aug 02, 2005 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
x^x ist intern double

das selbe wie "pow"-funktion

x*x ist float, wenn float benutzt wird
oder gar int, wenn int benutzt wird

und das ist schnell

x^x ist aber von natur schon langsamer...
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group