Winkelfunktionen geben falsche Werte zurück

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Travis
Beiträge: 35
Registriert: 09.03.2010 19:21

Winkelfunktionen geben falsche Werte zurück

Beitrag von Travis »

PureBasic gibt mir folgende Werte zurück :o :o :o :

cos(15) = -0.75968791285882131
cos(45) = 0.52532198881772973
cos(180) = -0.59846006905785809
cos(225) = 0.36731936773024515
cos(360) = -0.28369109148652732

Die realen Werte sind aber doch:

cos(15) = 0,9659
cos(45) = 0,7071
cos(180) = -1
cos(225) = -0,7071
cos(360) = 1

Muss die Funktion vielleicht noch kallibriert werden :shock: :shock: ???
Man kann alles sagen, man muss es nur vernünftig begründen können.
Ich hasse WASD-Steuerung | Ohne Pix saug ich nix | www.travis.bplaced.net
Benutzeravatar
helpy
Beiträge: 635
Registriert: 29.08.2004 13:29

Re: Winkelfunktionen geben falsche Werte zurück

Beitrag von helpy »

Siehe PureBasic-Hilfe
Syntax

Code: Alles auswählen

Ergebnis.f = Sin(Winkel.f)
Beschreibung

Gibt den Sinus des angegebenen Winkels zurück, 'Winkel.f' muss im Bogenmaß (Radiant) angegeben werden, das Ergebnis wird zwischen -1 und 1 liegen.
Siehe:
==> Bogenmaß
==> Umrechnung zwischen Radiant und Grad

Hoffe, das hilft einen Schritt weiter ;-)
cu,
helpy
Windows 10
PB Last Final / (Sometimes testing Beta versions)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Winkelfunktionen geben falsche Werte zurück

Beitrag von STARGÅTE »

:bounce:
Winkelfunktionen geben falsche Werte zurück. [...] Muss die Funktion vielleicht noch kallibriert werden ???
Wie geil, das ist echt Zitatwürdig. :allright:

Zum glück hast du das gesehen ^^ und wir rechnen alle seit über 7 jahren mit unkallibriert Werten :freak:

BTW: Cos(180) = -1 ist so oder so falsch! wenn dann Cos(180°) = -1 !!
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Travis
Beiträge: 35
Registriert: 09.03.2010 19:21

Re: Winkelfunktionen geben falsche Werte zurück

Beitrag von Travis »

@ helpy
Na doll. Bin es seit 9 Jahren gewohnt immer direkt den Winkel anzugeben. Zum Glück kann man sich ja 'ne Funktion dafür schreiben. In diesem Sinne hatte ich wohl doch recht mit der Kallibrierung :wink:

@ STARGÅTE bin auch gerade wieder am gucken 8)

hier stand was was gelöscht wurde wegen mittlerweiliger bezugslosigkeit
(bobobo)
Man kann alles sagen, man muss es nur vernünftig begründen können.
Ich hasse WASD-Steuerung | Ohne Pix saug ich nix | www.travis.bplaced.net
Benutzeravatar
Travis
Beiträge: 35
Registriert: 09.03.2010 19:21

Re: Winkelfunktionen geben falsche Werte zurück

Beitrag von Travis »

Die Botschaft ist mittlerweile angekommen. Habe das Problem jetzt gelöst.

Code: Alles auswählen

InitSprite()
InitKeyboard()
   
ResX = 800
ResY = 600
    
OpenWindow(0, 0, 0, 800, 650, "Cossin",#PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget)

 ButtonGadget(1,   0, 600, 100, 50, "Hide Cos") : ShowCos = 1
 ButtonGadget(2, 100, 600, 100, 50, "Hide Sin") : ShowSin = 1
 
 TextGadget(5, 250,605,50,20,"Amplitude:")
 TextGadget(6, 250,625,50,20,"Amplitude:")
 
 TrackBarGadget(3, 300, 600, 100, 20, 0, 200): SetGadgetState(3, 40): GadgetToolTip(3,"Kosinus") ; Schieber Kosinus
 TrackBarGadget(4, 300, 620, 100, 20, 0, 200): SetGadgetState(4,100): GadgetToolTip(4,"Sinus")   ; Schieber Sinus

OpenWindowedScreen(WindowID(0), 0, 0, ResX, ResY, 0, 0, 0)

Procedure.f CosW(w)
 ProcedureReturn Cos((3.141592653589793238/180)*w)
EndProcedure

Procedure.f SinW(w)
 ProcedureReturn Sin((3.141592653589793238/180)*w)
EndProcedure

Repeat

 Repeat
 
  Event = WindowEvent() ; Ist etwas im Fenster passiert?
      
   Select Event
    
     Case #PB_Event_Gadget ; Ein Gadget wurde gedrückt
     
      Select EventGadget()
      
       Case 1 ; Button 1
        If ShowCos = 1
         ShowCos = 0
         SetGadgetText(1,"Show Cos")
        Else
         ShowCos = 1
         SetGadgetText(1,"Hide Cos")
        EndIf
       Case 2 ; Button 2
        If ShowSin = 1
         ShowSin = 0
         SetGadgetText(2,"Show Sin")
        Else
         ShowSin = 1
         SetGadgetText(2,"Hide Sin")
        EndIf
      EndSelect
         
     Case #PB_Event_CloseWindow ; Fenster schliessen
      End
       
    EndSelect
      
 Until Event = 0


 ClearScreen(0) 
 StartDrawing(ScreenOutput())
  
  For y = 0 To ResY-1 Step 15
   For x = 0 To ResX-1 Step 15
    Plot(x,y,RGB(100,100,100))
   Next
  Next
 
  For x = 0 To ResX Step 100
   Line(x,0,1,768,RGB(64,64,64))
  Next
 
  For y = 0 To ResY Step 100
   Line(0,y,1024,1,RGB(64,64,64))
  Next
 
  For x = 1 To ResX-1
   If ShowCos
    h = GetGadgetState(3)
    y = h * CosW(x) + ResY/2
    Plot(x,y,RGB(0,255,0))
   EndIf
   If ShowSin
    h = GetGadgetState(4)
    y = h * SinW(x) + ResY/2
    Plot(x,y,RGB(255,0,0))
   EndIf
  Next
  
  StopDrawing() 
  FlipBuffers()

ForEver
Man kann alles sagen, man muss es nur vernünftig begründen können.
Ich hasse WASD-Steuerung | Ohne Pix saug ich nix | www.travis.bplaced.net
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: Winkelfunktionen geben falsche Werte zurück

Beitrag von CSHW89 »

statt '3.141592653589793238' kannste auch #PI schreiben.
is nicht so lang
lg kevin
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Benutzeravatar
captain_hesse
Beiträge: 138
Registriert: 17.05.2009 18:55
Computerausstattung: Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
Wohnort: Saarland

Re: Winkelfunktionen geben falsche Werte zurück

Beitrag von captain_hesse »

... aber irgendwas ist trotzdem nicht richtig denn wenn man

Code: Alles auswählen

a.f=Sin(#PI/180*50)
b.f=Sin(#PI/180)*50
Debug a
Debug b
Debug Sin(#PI/180*50)
Debug Sin(#PI/180)*50
eingibt kommt immer was anderes raus.
Warum ?? :?
Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Winkelfunktionen geben falsche Werte zurück

Beitrag von ts-soft »

captain_hesse hat geschrieben: eingibt kommt immer was anderes raus.
Warum ?? :?
Weil der Debugger double nutzt, hast ihm ja nichts anderes gesagt :wink:

Code: Alles auswählen

a.d=Sin(#PI/180*50)
b.d=Sin(#PI/180)*50
Debug a
Debug b
Debug Sin(#PI/180*50)
Debug Sin(#PI/180)*50
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
captain_hesse
Beiträge: 138
Registriert: 17.05.2009 18:55
Computerausstattung: Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
Wohnort: Saarland

Re: Winkelfunktionen geben falsche Werte zurück

Beitrag von captain_hesse »

Das verstehe ich nicht ganz,

1.) ist denn die ungenauigkeit der floats bzw. doubles so extrem ?
2.) wenn man die ersten vier zeilen weg lässt sind die ergebnisse immer noch verschieden.
Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Winkelfunktionen geben falsche Werte zurück

Beitrag von STARGÅTE »

Ja, ist doch richtig !

Wäre mir neu, wenn Sin oder Cos auf einmal linear wären :lol:

Sin und Cos nehmen immer noch das Bogenmaß als Parameter !

und (#PI/180*50) ist ein völlig anderer Winkel als (#PI/180)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten