Seite 1 von 1

atan2 Spezifikation

Verfasst: Donnerstag 19. April 2012, 13:19
von thomas15
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

Re: atan2 Spezifikation

Verfasst: Donnerstag 19. April 2012, 13:24
von EyDu
Da atan2 für x=y=0 nicht definiert ist, darf da natürlich auch beliebiger Unfug rauskommen.

Re: atan2 Spezifikation

Verfasst: Donnerstag 19. April 2012, 13:30
von thomas15
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

Re: atan2 Spezifikation

Verfasst: Donnerstag 19. April 2012, 17:36
von 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.