Demo von Cos() und Sin()

Übersicht BlitzBasic Codearchiv

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

sbrog

BeitragDo, Jul 15, 2004 21:04
Antworten mit Zitat
Benutzer-Profile anzeigen
BladeRunner hat Folgendes geschrieben:
Hast du auch nur ansatzweise Ahnung was du da verzapfst?
Du benutzt die Blitzinterne Sin()-Funktion welche natürlich mit Winkeln arbeitet.
das Bogenmass bräuchtest Du nur bei einer selbstgeschriebenen Sinus-Funktion welche nach der Tailorreihe arbeitet.
Sollte BB auch mit Tailorreihen arbeiten (es gibt auch andere Lösungsmöglichkeiten) so wird Mark Sibly die Umrechnung Winkel->Bogenmass schon eingearbeitet.


Ich hab keine Ahnung, wasdu meinst, aber ich möchte mal was anderes ansprechen.

Ich hab mal so ne Sinusfunktion geproggt, könnte man daraus einen Speedvorteil holen ?

BlitzBasic: [AUSKLAPPEN]


Print sinusberechnen(10,4)

Function nennersuchen(zahl)
For b = 0 To zahl
a= a * b
If a<1 Then a = 1
Next
Return a
End Function


Function sinusberechnen(zahl,genauigkeit)
Local hochzahl = 1
Local nenner = 1
Local sinus#
Local zwischenspeicher#
operator = True ; bei true wird addiert, bei false subtrahiert

For a = 0 To genauigkeit

zwischenspeicher = (zahl^hochzahl)/ nennersuchen(nenner)
hochzahl = hochzahl +2
nenner = nenner + 2

If operator = True
sinus = sinus + zwischenspeicher
operator = False
Else
sinus = sinus - zwischenspeicher
operator = True
EndIf


Next

Return sinus
End Function
[/syntax]

BladeRunner

Moderator

BeitragFr, Jul 16, 2004 7:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier ist ne Sinus-Funktion die ich mal geschraubt hatte (mit Vertex zusammen). Wir hatten damals auch Speedtests gemacht und BB lag eindeutig vorne (was mich auch nicht verwundert), d.h. die Funktion ist eigentlich nur zu Studienzwecken interessant.
Die Funktion ist schon auf eine Eingabe im Kreiswinkelformat vorbereitet (d.h. sie arbeitet identisch zu sin(x)).

Dein Ansatz wird nicht funktionieren, zum einen da Du immernoch Winkelwerte angibst obwohl Bogenmass verlangt wäre; zum anderen da Du weder deine Eingangsvariablen noch deine Funktion mit Floats arbeiten lässt. Wenn man deine Funktion mit pi/4 füttert (der Bogenmass-Entsprechung für 45°) liefert sie 1 zurück. Das korrekte Ergebnis wäre jedoch 0.707etc.

Aber hier meine Sinus-Funktion:


BlitzBasic: [AUSKLAPPEN]

Function sin2#(y#)
x# = y*Pi/180 ;Übergabeparameter von ° nach Bogenmass wandeln
Local erg# = 0, add, i

While x#>=2*Pi : x# = x#-2*Pi : Wend ;Bogenmass auf eine Kreislänge begrenzen
While x#<0 : x# = x#+2*Pi : Wend

For i = 0 To 10 ; 10 Iterationen
add=(-1)^i

erg# = erg#+((x#^(2*i+1)/fac(2*i+1))*add)



Next

Return erg#
End Function

Function fac(x) ;bildet die Fakultät
Local erg = 1

If(x = 0) Then Return 1

While x>1
erg = erg*x
x = x-1
Wend

Return erg
End Function
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group