ich habe hier ein Problem, das mir Kopfzerbrechen bereitet.
Aber zunächst mal der Code:
Code: Alles auswählen
#include <iostream>
#include <stdint.h>
int main( int argc, char *argv[] ) {
int64_t x;
int64_t y;
int64_t _M = 24;
x = 1024 << _M;
y = 2048 << _M;
std::cout << "x = " << x << std::endl;
std::cout << "y = " << y << std::endl;
std::cout << "x*y = " << x*y << std::endl;
std::cout << ( (x*y)>>_M ) << std::endl;
return 0;
}
Code: Alles auswählen
/tmp$ ./test
x = 0
y = 0
x*y = 0
0
Und nun die goldene Frage: WARUM?
Für x erwarte ich den Wert 17179869184. Y muss entsprechend doppelt so hoch sein.
Hintergrund dieses Beispiels ist eine Berechnung von Fliesskommawerten mit Hilfe von ganzzahligen Ints. Darum verwende ich int64_t um genügend Platz für die Nachkommastellen zu haben.
Ich möchte also einfach eine Operation wie a*b durchführen. Ich definiere den Punkt an dem das Komma gesetzt werden soll mit _M. Hier also das 24. Bit.
Wer mag mir da weiterhelfen?
Vielen Dank,
Lev