Problem mit Typ cast float zu int

Hallo,

irgendwie klemmt es mal wieder bei mir.

Wenn ich das so schreibe erhalte ich ordentlich Werte zwischen -10.000 und +10.000

for (int i=0; i<360; i++)  {
   Serial.println(Grad_to_Bogenmass(i) ); 
 }
 
}   // Ende loop

/* ------------------------------------------------------------------------------------------------ */

int Grad_to_Bogenmass( float a )    // Berechnung des Bogenmasses vom Sinuskreis
{
    int b = 0;
    b = cos (a / 180 * PI)*10000 + 0.5;   // multipliziert mit 10k um brauchbare Ganzzahlen zubekommen + richtig runden lassen
    return(b);                      
}

Angefangen hatte ich aber, mit Typcast Operator wie man das eigentlich macht, so:

b = (int) cos (a / 180 * PI)*10000 + 0.5;

damit erhalte ich aber nur 0 oder +/- 10.0000. Nichts dazwischen. Warum?
Nur wenn das ohne Typcast Operator wie oben funktioniert, wofür braucht man dann den Typcast Operator?

Du vergisst glaube ich die Operator Reihenfolge:
http://en.cppreference.com/w/cpp/language/operator_precedence
Cast gehen weit vor Rechenoperationen

Du willst eher das:

b = (int) (cos (a / 180 * PI)*10000 + 0.5);

Und manche Casts sind implizit. Deshalb sind sie nicht immer nötig.

Hallo,

ach Sch… ja. Die Klammersetzung. Bedeutet (int) galt nur für cos und nicht für den Rest der Formel. :slight_smile:

Vielen Dank.