atan2 Spezifikation

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
thomas15
User
Beiträge: 98
Registriert: Montag 7. April 2008, 19:07

Hi Pythonianer,

uns ist letztens was lustiges Untergekommen, was Inkonsistent in sich selbst und mit Matlab / C ebenfalls:
Die Ergebnisse sind unterschiedlich, man beachte dass fuer ints in Python ein anderes Ergebniss kommt als fuer floats...

Python 2.6:

Code: Alles auswählen

from math import atan2
atan2(0,-0)
0.0
atan2(0.0,-0.0)
3.1415926535897931
Matlab:

Code: Alles auswählen

>> atan2(0,-0)

ans =

     0

>> atan2(0.0,-0.0)

ans =

     0

Mit C++

Code: Alles auswählen

#include <stdio.h>
#include <math.h>

#define PI 3.14159265

int main ()
{
  double x, y, result;
  x = 0.0;
  y = -0.0;
  result = atan2 (y,x) ;
  printf ("The arc tangent for (x=%lf, y=%lf) is %lf ", x, y, result );
  return 0;
}

The arc tangent for (x=0.000000, y=-0.000000) is -0.000000


Wo liegt der Fehler?

Gruesse,
T
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Da atan2 für x=y=0 nicht definiert ist, darf da natürlich auch beliebiger Unfug rauskommen.
Das Leben ist wie ein Tennisball.
thomas15
User
Beiträge: 98
Registriert: Montag 7. April 2008, 19:07

Mathematisch gesehen schon,
aber warum ist das inkonsistent vor allem gegen die in C verwendeten libs?
Sollten das nicht die gleichen sein und deshalb Konsistent?

Beliebiger Unfug kann dumme Konsequenzen nach sich ziehen.

z.B:

x = alpha + atan2(0.0,-0.0) * 180/PI
lunar

@thomas15: Korrigiere die Parameter-Reihenfolge in Deinem C++-Beispiel, dann erhältst Du auch dieselben Ergebnisse wie in Python.

MatLab ist was ganz anderes als C, und wird kaum die C-Standardbibliothek verwenden.
Antworten