Frage zu int() bzw. besser zu pow()

Hallo zusammen,

pow(2,i) liefert float zurück. Ich hätte gerne ein Integer und dachte, caste ich einfach:
int( pow(2,i))
Das liefert aber im Falle von i=3 die Zahl 7 zurück. Kann mir das jemand erklären?

Hier ein Mitschnitt vom serial-monitor:

i ist 1  und 2^i ist:  2.00
int(pow(2,i)) ergibt aber: 2
i ist 2  und 2^i ist:  4.00
int(pow(2,i)) ergibt aber: 3
i ist 3  und 2^i ist:  8.00
int(pow(2,i)) ergibt aber: 7

und hier ein Quelltextschnipsel dazu:

for(int i =1;i<4;i++){
Serial.print("i ist “);
Serial.print(i);
Serial.print(” und 2^i ist: ");
Serial.println(pow(2,i));
Serial.print("int(pow(2,i)) ergibt aber: ");
Serial.println(int(pow(2,i)));
}

Danke für Hinweise, wahrscheinlich bin ich wieder in ein Anfänger-Fettnäpfchen getreten.

lg fresapo

edit: ich habe die Threadüberschrift angepasst, sie enthält jetzt pow()

Ich geh davon aus dass das pow() das Problem ist, das wird z.B. intern 7.99999 statt der 8 auswerfen, was dann beim cast nach int eben 7 erzeugt, weils das einfach die Nachkommastellen abschneidet, wohingegen Deine Ausgabe wohl richtig macht...

Füge mal spaßeshalber vor dem int()-cast irgendwas hinzu, z.b. "0.001" und guck was passiert.

Die pow() hat bei mir auch schonmal Probleme gemacht, daher verwende ich das in meinen Programmen nicht mehr. :(

Wenn es kein Problem ist, etwas mehr zu berechnen, kannst du auch runden.

//Für positive und negative Zahlen
int round(float f)
{
  return(int(f < 0 ? f-0.5 : f+0.5));
}

//Wenn du nur positive Zahlen hast
int round(float f)
{
  return(int(f+0.5));
}

Joghurt: Füge mal spaßeshalber vor dem int()-cast irgendwas hinzu, z.b. "0.001" und guck was passiert.

Die pow() hat bei mir auch schonmal Probleme gemacht, daher verwende ich das in meinen Programmen nicht mehr. :(

Hi, danke, damit klappt's. Die Ausgabe 8.00 ist halt irritierend, wenn's 7.99...9 ist. lg fresapo

edit: @BlazeX: ich addiere nun einfach 0.5, damit gibt's kein Problem mehr (man muss es halt nur wissen ...)