Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Sep 04, 2025 04:27

Foren-Übersicht » Programmierung » Mathematik-Forum
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
BeitragVerfasst: Do Mär 11, 2010 15:08 
Offline
DGL Member
Benutzeravatar

Registriert: So Mär 07, 2010 18:40
Beiträge: 33
Hallo zusammen,

ich bin bei der Fehlersuche auf folgendes gestoßen:

Code:
  newx := cos(90);  newy := sin(90);


Eigentlich würde ich erwarten, dass newx den Wert 0 erhält und newy den Wert 1. Stattdessen errechnet mir Delphi für newx -0,448073625564575 und für newy 0,89399665594101.

Hat irgend jemand eine Idee warum?

_________________
Wissen nennen wir jenen kleinen Teil der Unwissenheit, den wir geordnet und klassifiziert haben. (Ambrose Bierce)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rechenkünstler
BeitragVerfasst: Do Mär 11, 2010 15:20 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
du musst für sin, cos, etc. in bogenmaß rechnen. heisst du musst deine winkel mit 2*Pi/360 skalieren


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rechenkünstler
BeitragVerfasst: Do Mär 11, 2010 16:18 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
in Delphi gibts dafür auch die Funktionen degtorad() und radtodeg() ; Ich glaube in der math.pas sind die enthalten.

Edit: Deg = Degrees = Grad; Rad = Radiant = Bogenmaß

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rechenkünstler
BeitragVerfasst: Do Mär 11, 2010 18:03 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wegen Bullshit entfernt.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rechenkünstler
BeitragVerfasst: Do Mär 11, 2010 18:28 
Offline
DGL Member
Benutzeravatar

Registriert: So Feb 06, 2005 17:29
Beiträge: 187
Programmiersprache: C, C++
@Flash: Wie kommst du auf diese Werte? Meiner Meinung nach sind newx -0,448073625564575 und für newy 0,89399665594101 schon richtig (für 90 rad).

_________________
Flummi: Projektseite und Projektthread


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rechenkünstler
BeitragVerfasst: Do Mär 11, 2010 19:14 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich gebe dir recht und behaupte das Gegenteil. Siehe oben.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rechenkünstler
BeitragVerfasst: Do Mär 11, 2010 20:13 
Offline
DGL Member
Benutzeravatar

Registriert: So Mär 07, 2010 18:40
Beiträge: 33
Hi Jungs,

danke für die Starthilfe - bin ich froh, dass ich mein Studium schon einige Zeit in der Tasche habe (Mathe war nie meine Stärke).

Habe meinen Code jetzt wie folgt geändert:

Code:
  1. newx := cos(DegToRad(0));
  2.   newy := sin(DegToRad(180));


Aber irgendwie habe ich es noch nicht recht verstanden. Mit DegToRad sollte z.B. 0° ins Bogenmaß umgerechnet werden. Bei einem Cosinus von 0 würde ich 1 erwarten erhalte aber 0. Beim Sinus von 180 würde ich 0 erwarten, bekomme aber -5,42101086242752E-20 als Ergebnis.

Irgendwie stehe ich noch auf dem Schlauch.

_________________
Wissen nennen wir jenen kleinen Teil der Unwissenheit, den wir geordnet und klassifiziert haben. (Ambrose Bierce)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rechenkünstler
BeitragVerfasst: Do Mär 11, 2010 20:25 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Beim Sinus von 180 würde ich 0 erwarten, bekomme aber -5,42101086242752E-20 als Ergebnis.

5.4 * 10^-20, das ist doch quasi Null, ein genaueres Ergebnis kannst du nicht erwarten.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rechenkünstler
BeitragVerfasst: Do Mär 11, 2010 20:25 
Offline
DGL Member

Registriert: Do Jun 28, 2007 17:58
Beiträge: 193
Programmiersprache: Pascal, C
-5,42101086242752E-20, also -0,0000000000000000000542101086242752 ist doch schon fast Null, oder?

Edit: Mist, zu spät ;-)

_________________
http://audorra.sourceforge.net//http://andorra.sourceforge.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rechenkünstler
BeitragVerfasst: Do Mär 11, 2010 21:29 
Offline
DGL Member
Benutzeravatar

Registriert: So Mär 07, 2010 18:40
Beiträge: 33
Ok, für Sinus akzeptiert, aber bei Cosinus von 0 würde ich 1 erwarten erhalte aber 0 (und hier hoffe ich nicht, dass es ein Rundungsfehler ist :D )

_________________
Wissen nennen wir jenen kleinen Teil der Unwissenheit, den wir geordnet und klassifiziert haben. (Ambrose Bierce)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rechenkünstler
BeitragVerfasst: Do Mär 11, 2010 22:55 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Was sagt den cos(0) ?
Ich vermute stark das du da irgendwo die falsch Variable ausgelesen hast oder so.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rechenkünstler
BeitragVerfasst: Fr Mär 12, 2010 20:17 
Offline
DGL Member
Benutzeravatar

Registriert: So Mär 07, 2010 18:40
Beiträge: 33
Ok, last but not least funtioniert es nun

Zitat:
A := (V1.X -0.5)* cos(RotateFactor*Pi/180) - (V1.Z -0.5) * sin(RotateFactor*Pi/180);
B := (V1.X -0.5)* sin(RotateFactor*Pi/180) + (V1.Z -0.5) * cos(RotateFactor*Pi/180);


Aus irgendeinem Grund wollte es mit der DegToRad Funktion nicht klappen, aber mit dem Tipp von Delphic hat es dann geklappt.

PS. Falls sich jemand über die -0,5 wundert, die sind dazu da, um das Objekt so zu verschieben, dass der Mittelpunkt des Koordinatensystems auch der Mittelpunkt des Objekts ist (und ja, es wäre wohl einfacher die Zeichenroutine zu ändern und glRotate zu benutzen, aber ich bin ja noch OpenGL Neuling :) ).

_________________
Wissen nennen wir jenen kleinen Teil der Unwissenheit, den wir geordnet und klassifiziert haben. (Ambrose Bierce)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rechenkünstler
BeitragVerfasst: Sa Mär 13, 2010 09:01 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
Ohne das jetzt genau nachgeprüft zu haben, glaube ich mich zu erinnern daß Delphi von links nach rechts optimiert. Heisst er rechnet bei
Code:
  1. RotateFactor*Pi/180

tatsächlich einmal Multiplikation und einmal Division. Du bist in jedem Falle nicht schlechter dran, wenn du den Faktor klammerst
Code:
  1. RotateFactor*(Pi/180.0)

denn so stellst Du sicher, daß nur eine Multiplikation durchgeführt wird. Oder wenn Du ausnutzen willst, daß von links nach rechts optimiert wird kannst Du auch schreiben
Code:
  1. Pi/180.0 * RotateFactor

das führt zum selben Effekt - aber die Variante mit dem Klammern ist verlässlich und lässt dem Optimierer egal welchen Compilers zu egal welcher Sprache kaum eine Option als zu optimieren, ob er nun von links oder von rechts arbeitet. Klammern können in bestimmten Situationen auch dazu genutzt werden, die numerische Stabilität zu erhöhen, das ist aber v.a. dann wichtig, wenn echt subtrahiert wird oder verschieden große Zahlen addiert werden... Das aber nur so als kleine Nebeninfo.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rechenkünstler
BeitragVerfasst: Sa Mär 13, 2010 12:27 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
@Delphic: Bevor man solchen Kleinkram optimiert sollte man wahrscheinlich lieber sin bzw. cos nur einmal auswerten ;)

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Rechenkünstler
BeitragVerfasst: So Mär 14, 2010 13:07 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
Auch wenn das Thema geklärt ist und auch nicht sonderlich komplex ist, sollte man doch evtl. in Betracht ziehen den Threadtitel etwas ausagekräftiger zu gestalten.

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Mathematik-Forum


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 22 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 14 Queries | GZIP : On ]