Sinus Cosinus Speedvergleich Berechnung vs. Lookup

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Bob

Betreff: Sinus Cosinus Speedvergleich Berechnung vs. Lookup

BeitragMo, Jun 14, 2004 19:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute,

da ich in einem Projekt exessiven Gebrauch von Sin und Cos Funktionen
mache, habe ich mal einen kleinen Speedtest zwischen der Berechnung der Werte und einer Lookup Tabelle (Dim Feld) veranstalltet.
Das Lookup ist gut 50% schneller.
(Hätte ich nicht gedacht.)
Allerdings ist fraglich ob das Lookup dennoch notwendig ist da
hier immerhin 18.000.360 mal ein Wert ausgelesen wird.
Auf meiner Schleuder beträgt die differenz NUR ca. 2,5 Sekunden.
Seis drum. Für alle die es >Interessiert wie man auch noch den letzten Frame aus der Kiste Kitzeln kann hier der Code.
Gruß von Bob


Code: [AUSKLAPPEN]
; Sinus Cosinus Speed Test
Graphics 640,480,16
Dim sin2#(359)
Dim Cos2#(359)

For i = 0 To 359
    sin2(I) = Sin(I)
    cos2(I) = cos(I)
    ;DebugLog Sin2(i) + "   " + Cos2(i)
Next

Text 0,0, "Bitte warten"
stop1 =0
stop2 = 0

;Zeiterfassung unmittelbar vor der Schleife
oldtime1 =  MilliSecs()
For i = 0 To 50000
    For j = 0 To 359
        xxx# = Sin(J)
        yyy# = Cos(J)
    Next
Next
stop1 = MilliSecs() - oldtime1

Cls
Text 0,0, "Berechnung  mit Sin Cos dauerte " + stop1

;Zeiterfassung unmittelbar For (kleiner gag) der Schleife
oldtime2 =  MilliSecs()
For i = 0 To 50000
    For j = 0 To 359
        xxx# = Sin2(J)
        yyy# = Cos2(J)
    Next
Next
stop2 = MilliSecs() - oldtime2

cls
While Not KeyHit(1)

Text 0,0, "Berechnung  mit Sin Cos dauerte " + stop1
Text 0,20, "Lookup mit Sin Cos dauerte " + stop2
Text 0,40, "Für Zufallsvergleich Taste 1"


If  KeyHit(2) Then
   xxx = Rand(0,359)
   cls
   If Rand (0,1) = 1 Then
      Text 0,60, "Sinus vergleich Ber. / Lookup " + Sin(xxx) + " / " + sin2(xxx)
   Else
      Text 0,60, "Cosinus vergleich Ber. / Lookup " + Sin(xxx) + " / " + sin2(xxx)
   EndIf
EndIf

Wend
End

TheShadow

Moderator

BeitragMo, Jun 14, 2004 19:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst schon selbst entscheiden wann es sinnvoller ist... Manchmal ist es sogar so, dass sin/cos oft gebraucht wird, aber eine tabelle nicht ausreicht, weil man deutlich genauere Gradwere übergeben will...

Berechnung von Sin/Cos ist einfach ganz schon "kompliziert", wärend eine Tabelle nur dumme zahlenschieberei ist...
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Bob

BeitragMo, Jun 14, 2004 20:00
Antworten mit Zitat
Benutzer-Profile anzeigen
TheShadow hat Folgendes geschrieben:
Du musst schon selbst entscheiden wann es sinnvoller ist...


Genau das werd ich auch. Wink
Ich werde die Berechnungen in dem Projekt machen weil ich float Werte übergebe.
Nichts desto Trotz dürfte das Dim Feld für einfache 2D Jump 'n Run ausreichen.
Ich wollt's halt nur mal genau wissen.
(Grundlagenforschung ist nie verkehrt)

Gruß Bob
 

darkshadow

BeitragSa, Jun 19, 2004 21:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich mich nicht irre und meine ehemalige Mathematiklehrerin mich und die gesammte Klasse nicht angelogen hat, dann kann man sich sogar die Cos Berechnug sparen Wink
Cos von X = Sin von X - PI
oder so in etwa war es.. Aber auf solche minimalen Speedunterschiede bei der Vorberechnung der Tabelle sind wir ja nicht unbedingt angewiesen.. Very Happy

Holzchopf

Meisterpacker

BeitragSa, Jun 19, 2004 22:27
Antworten mit Zitat
Benutzer-Profile anzeigen
wohl eher doch nur "oder so in etwa" weil Cosinus und Sinus Funktionen sind, die einen Wert von -1 bis 1 liefern, und PI ist 3.1415926535897932384626433832795, wenn du das subtrahierst fällst du also 100% aus dem Bereich -1 bis 1 raus.
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Gossi

BeitragSa, Jun 19, 2004 22:32
Antworten mit Zitat
Benutzer-Profile anzeigen
darkshadow meint, dass Cos um eine halbe Periode verschoben ist, da PI 180° entspricht. Außerdem hat er recht, wenn er im Grad-Maß, stett im Bogenmaß rechnet. Im Bogenmaß muss man nicht PI, sondern im Parameter 180 abziehen.
Alle Wasser laufen ins Meer, doch wird das Meer nicht voller; an den Ort, dahin sie fließen, fließen sie immer wieder. (...) Was geschehen ist, eben das wird hernach sein. Was man getan hat, eben das tut man hernach wieder, und es geschieht nichts neues unter der Sonne. Geschieht etwas, von dem man sagen könnte: "Sieh, das ist neu"? Es ist längst vorher auch geschehen in den Zeiten, die vor uns gewesen sind.

Holzchopf

Meisterpacker

BeitragSa, Jun 19, 2004 22:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Gossi: Jup schon klar, aber ob man nun Cos berechnet oder Sin-180° spielt keine Rolle von der Geschwindigkeit her, weil ja beide Funktionen berechnet werden. DS hingegen meinte, nur eine Funktion berechnen lassen und die andere davon ableiten, was aber eben schwierig wird...
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

Dreamora

BeitragSo, Jun 20, 2004 13:40
Antworten mit Zitat
Benutzer-Profile anzeigen
was is daran genau schwer?

sin(alpha) = cos(alpha - 90 ) bzw. sin(bogen) = cos(bogen - PI/2 )

wenn du mit lookup arbeitest, erspart dir das eine tabelle
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Holzchopf

Meisterpacker

BeitragSo, Jun 20, 2004 14:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora hat Folgendes geschrieben:
was is daran genau schwer?

sin(alpha) = cos(alpha - 90 ) bzw. sin(bogen) = cos(bogen - PI/2 )

wenn du mit lookup arbeitest, erspart dir das eine tabelle


Schon klar, aber du benutzt immer noch in beiden Fällen 2 Funktionen. Und so wie ich DS verstanden habe versucht er mir nur einer Funktion die Werte von Sinus und Cosinus auszurechnen. So in der Art:
Sin(60°) - Irgendwas = Cos(60°)

Was dann bedeuten würde, dass man bei einer Sin/Cos-Steuerung in einem Spiel statt
Code: [AUSKLAPPEN]

xPlus = Cos( Winkel )
yPlus = Sin( Winkel )

sowas schreiben könnte:
Code: [AUSKLAPPEN]

xPlus = Cos( Winkel )
yPlus = xPlus - irgendwas


Wie du siehst würde hier auf eine Funktion ganz verzichtet, aber eben - mit diesem Ansatz kommst du nicht so schnell an eine funktionierende Lösung (wahrscheinlich gar nicht).
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

Dreamora

BeitragSo, Jun 20, 2004 14:55
Antworten mit Zitat
Benutzer-Profile anzeigen
du verstehst genau 0 von Trigonometrie, stimmts?


das "- irgendwas" muss IN der klammer sein net ausserhalb!

Das heisst, wenn du Cos(x) willst, kannste gerade so gut Sin(x + 90) ausrechnen.
Im Endeffekt kommt das nicht wirklich draufan, da beide +- gleich lange brauchen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Holzchopf

Meisterpacker

BeitragSo, Jun 20, 2004 15:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora hat Folgendes geschrieben:
du verstehst genau 0 von Trigonometrie, stimmts?


das "- irgendwas" muss IN der klammer sein net ausserhalb!

Das heisst, wenn du Cos(x) willst, kannste gerade so gut Sin(x + 90) ausrechnen.
Im Endeffekt kommt das nicht wirklich draufan, da beide +- gleich lange brauchen.


Ah du Birä!
Das ist genau das was ich Sagen will es geht nicht mit nur einer Funktion Exclamation

Wenn du den Wert von Sinus und Cosinus haben willst kommst du nicht drumherum 2 Mal eine trig. Funktion aufzurufen. Ob du nun Sin( Winkel ) und Sin( Winkel - 90° ) rechnest oder Sin( Winkel ) und Cos( Winkel ) spielt da absolut null Rolle.

Zeigt mal wieder wos überall zu verständigungs-Problemen führen kann und deren Folgen... Ob ich DS richtig verstanden hab ist mir mittlerweile wurscht Confused

PS: Von Trigonometrie hab ich sehr wohl ne Ahnung Smile
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

Dreamora

BeitragSo, Jun 20, 2004 18:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt trigonometrische Möglichkeiten um das Umzuwandeln. Sind im Netz zu finden, entweder als Trigonometrie II / III oder Goniometrie.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Holzchopf

Meisterpacker

BeitragSo, Jun 20, 2004 19:00
Antworten mit Zitat
Benutzer-Profile anzeigen
ja aber das bringt keine Geschwindigkeitsvorteile Smile (um das gings ja hier mal ursprünglich)
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

Dreamora

BeitragSo, Jun 20, 2004 19:04
Antworten mit Zitat
Benutzer-Profile anzeigen
aha bringts nicht wenn du aus Sin x * Cos x bzw. Sin x + Cos x etwas machen kannst was zb sin( 2*x) oder so sein könnte?
Wusste erst net was du mit deinem Text genau meinst wegen "2 Funktionen" deshalb die andere antwort
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Holzchopf

Meisterpacker

BeitragSo, Jun 20, 2004 19:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora hat Folgendes geschrieben:
aha bringts nicht wenn du aus Sin x * Cos x bzw. Sin x + Cos x etwas machen kannst was zb sin( 2*x) oder so sein könnte?
Wusste erst net was du mit deinem Text genau meinst wegen "2 Funktionen" deshalb die andere antwort


Doch dann würde es etwas bringen, weil ja eine Funktion wegfallen würde (Mit Funktionen meine ich Sin/Cos)...
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

darkshadow

BeitragSo, Jun 20, 2004 21:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Was ich gemeint habe ist, dass ich den Wert eines Winkels mit Sin berechne.. Ihn speicher und einfach eine halbe Periode (PI) von ihm abziehe.. Da ist doch dann nix weiter, wo ich Cos brauch.. oder?! Shocked
Ich hab das hier nur rasch alles überflogen, da ich keine Lust auf diese egozentrischen Texte genaustens zu studieren.. Very Happy
 

zocker2150

BeitragMi, Jun 23, 2004 1:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Bringt doch eigendlich auch nix.
Da du für den cos(x) dann halt sin(x + PI/2) schreibst mach doch kein Rechenunterschied bzw. es bringt keinerlei Geschwindigkeitsvorteile.

Die einzige möglichkeit die sin(x)/cos(x) Funktionen zum umgehen wäre mit einer Taylor-Entwicklung.
Was jedoch höchst warscheinlich langsamer ist Question
 

Dreamora

BeitragMi, Jun 23, 2004 1:46
Antworten mit Zitat
Benutzer-Profile anzeigen
jo wärs definitiv, da es nicht für die praktische anwendung ausgelegt ist.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group