Zahlenraum von Berechnungen

Gast #3839036
Lesenswert?

Hallo,
ich habe folgendes Problem:
Ich möchte einen BMP180-Drucksensor mit einem ATtiny 84A zum laufen 
bekommen. Leider muss man um die richtigen Werte zu bekommen ziemlich 
viel mit den internen Kalibrationswerten herumrechnen, und das klappt 
einfach nicht.
Zum Beispiel folgendes:

bmp180_cal.X2 = ((int32_t) bmp180_cal.MC * 2^11);

bmp180_cal.X2 ist vom Typ int32_t, bmp180_cal.MC ist -11786 und int16_t.
Ich erwarte ein Ergebniss von -24137728, es kommt jedoch -23577 heraus.
Die Berechnung sollte ja im größeren Zahlenbereich ausgeführt werden, 
also 32Bit. Also eigentlich kein Problem, oder? (2l statt 2 hilft auch 
nicht.)

Was mache ich falsch, ich komme einfach nicht drauf.
#3839051
Lesenswert?

Manchmal ist es auch vernünftig, nicht zu faul zu sein, sondern sich 
einen Taschenrechner zu schnappen und 2 hoch 11 selbst auszurechnen, 
wenn man schon nicht die Werte der 2-er Potenzen auswendig kennt.

2 hoch 11 ergibt 2048. Also einfach anstatt des Künstlens
1
   bmp180_cal.X2 = (int32_t) bmp180_cal.MC * 2048L;
und dann klappts.
Zugegeben, macht nicht soviel hier wie das Anschreiben als 2-er Potenz. 
Aber irgendwo muss man auch Abstriche machen. Im Gegenzug ist dafür die 
Operation selbst für Grundschulkinder leicht zu verstehen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren