Arduino - ungerade Exponenten Verhalten mit pow(x,y) - Funktion

Ich habe in den letzten paar Stunden debugging dieses problem, und schließlich löste es selbst. Dachte, ich würde es hier posten, um zu verhindern, dass andere mit dem gleichen problem lächerlich.

Ich würde auf jeden Fall offen sein, um eine tiefere Erklärung, wie warum meine Antwort ist eine Erklärung.


Arbeite ich mit der pow(x,y) - Funktion zum zurückgeben Exponenten. Ich war zu bemerken, sehr komisches Verhalten mit dem Exponenten, und ich kann nicht ganz verstehen, warum. Hier ist mein code:

for (int n=0;n<5;n++)
{
    int x = pow(2,n);
    Serial.print(n); 
    Serial.print(" ");
    Serial.println(x);
}

Und hier ist meine Ausgabe:

0 1
1 2
2 3
3 7
4 15

Also diese zahlen sind offensichtlich nicht richtig. Komisch ist, wenn ich den gleichen code in einem C++ - Programm in Xcode (mit cout-Anweisungen anstelle von Serieller Ausgang) bekomme ich die folgende (was ich erwarten würde):

0 1
1 2
2 4
3 8
4 16

Warum in der Welt würde diese Rückkehr voraussichtlich meine Werte in Xcode, aber nicht auf dem arduino? Warum funktioniert der arduino zurück pow(2,n) = 2^n-1 für jeden Wert n größer als 1?

  • Meinst du die Verwendung 1<<n?
  • nicht sicher, was du damit meinst. Habe ich meine große Werte von n? Nein.
  • Ich meine, dass (int)pow(2,n) ist etwas, das sollte nicht geschrieben werden. pow ist für floating point. C++ hat operator<<, wo 1<<n gibt die N-te Potenz von 2 ist.
InformationsquelleAutor Ryan Tuck | 2013-11-27
Schreibe einen Kommentar