Problem mit der Umrechnung von Radian2Degree

timestamp

Mitglied Käsekuchen
Hallo Forum,

ich scheitere gerade kläglich an der Umrechnung vom Bogenmaß ins Gradmaß. Ich vermute einen Fehler bei der Präzision, wundere mich aber, dass es gleich so heftig daneben liegt. Auch weiß ich nicht, wie ich das beheben könnte.
Die atan2 Funktion liefert den richtigen Wert. Die Umrechnung ist jedoch falsch
C++:
//MathLib.h
#ifndef MATHLIB_H
#define MATHLIB_H 1
const int PI  = 3.14159265359;
const int TAU  = 6.28318530718;

double rad2deg(double rad){
  return rad/TAU * 360;
}
double deg2rad(double deg){
  return deg/360 * TAU;
}
#endif // CONSTANTS_H



//ComplexNumber.cpp
#include "ComplexNumber.h"
#include "MathLib.h";
#include <math.h>

ComplexNumber::ComplexNumber(double re, double im) : re(re), im(im){
};

double ComplexNumber::getAngle(bool inDegrees){
    if( inDegrees ){
        return rad2deg(atan2(this->re, this->im));
    }
    return atan2(this->re, this->im);
}

//main.cpp
ComplexNumber z = ComplexNumber(1, 1);
cout << "Radius: " << z.getRadius() << endl;
cout << "Angle(rad): " << z.getAngle() << endl;
cout << "Angle(deg): " << z.getAngle(true) << endl;

Ausgabe:
Radius: 1.14121
Angle(rad): 0.785398
Angle(deg): 47.1239


edit:
Okay, er teilt nur durch 6 und nicht durch 6.28, somit komme ich zumindest auf die 47°.... aber warum nicht?

edit 2:
Sorry für den Post, wenn man die Variable als int deklariert darf man sich natürlich nicht wundern.
In dem Sinne, schönen Abend noch, ich bin reif fürs Bett...
 
Hi

Der Radius schaut falsch (abgetippt?) aus.
1.41421 macht mehr Sinn als 1.14121

Und zum eigentlichen Problem ... deine PI-Konstante ist ein int :) Also praktisch nur 3.
Übrigens gibt es M_PI, dass je nach Implementierung wahrscheinlich die bestmögliche Genauigkeit hat.
(und TAU ist einfach das Doppelte davon)
 
Zurück