Store the multiplication(16 bit * 16 bit) result in two separate 16 bit variables
-
I am trying to implement fixpoint arithmetics
How can I store the multiplication(16 bit * 16 bit) result in two separate 16 bit variables?
-
Rechne mit 32bit und zerpflück das Ergebnis dann:
uint16_t a, b; uint32_t temp = ((uint32_t)a)*b; uint16_t c = temp >> 16; uint16_t d = temp & 0xffff;
(ungetestet)
-
Ich darf es nicht, sollte eine 16 bit implementierung sein
-
Dann kannst Du a und b jeweils auf 2 8-bit Variablen aufteilen und mit diesen dann die schriftliche Multiplikation aus der Grundschule implementieren.
Oder halt inline-asm. Die Multiplikation auf x86 macht genau das, was Du willst.
-
Kannst du es bitte detalierter erklären.
Ich habe dann z.B aus 1010010010011110 2 8-bit Variablen 10100100 und 10011110
für a und für b
bei der Multiplikation wird alles intern summiert
-
Du könntest auf die Assemblerebene heruntergehen und mit den 16 Bit Registern und deren Aufteilung arbeiten. Der Befehl
mul bx
multipliziert das (16 Bit Integer) Register ax mit bx und die Summe landet in dx und ax (also DX:AX)(32 Bit)
Wenn du die Möglichkeit hast, probiere das mal in dem (32bit/16Bit-)Windows/Dos-Programm Debug.exe aus.
-
bobotic schrieb:
Ich darf es nicht, sollte eine 16 bit implementierung sein
Nimm dies als Beispiel und dann für 16 bit umbauen.
http://stackoverflow.com/questions/22845801/32-bit-signed-multiplication-without-using-64-bit-data-type