32 Bit Festkomma mult. ->64bit < Softwaretechnik+Pro < Praktische Inform. < Hochschule < Informatik < Vorhilfe
|
Status: |
(Frage) reagiert/warte auf Reaktion | Datum: | 18:58 So 07.03.2010 | Autor: | davidoffff |
Hallo!
Ich stehe gerade vor folgendem Problem
Ich will zwei 32 bit unsigned integer zahlen binär miteinander multiplizieren.
natürlich gibt es hier einen überlauf und man verliert bits.
(Ich verwende lediglich C, kein C++)
um keinen bit zu verlieren müsste ich eine 64 bit variable verwenden.
Durch die Verwendung von "unsigned long long" hab ich aber das problem, dass die ersten 32 bit ident zu den zweiten 32 bit sind
also:
Binäre darstellung
uint32 a = 00010011001100110011001101000000
uint32 b = 00010011001100110011001101000000
bei
unsigned long long iTmpA = a;
bekomme ich wieder
0001001100110011001100110100000000010011001100110011001101000000
wenn ich nun:
iTmpA & 0xFFFFFFFF anwende, bekomme ich leider das selbe ergebnis - also
0001001100110011001100110100000000010011001100110011001101000000
ich hoffe ich hab das problem ausreichend beschrieben.
Wie kann ich dem ganzen habhaft werden?
ich verwende übrigens eine eigene darstellung der zahlen
1 bit vorzeichen
3 bit dezimalstelle
28 bit nachkomma
dies ist der grund warum ich einen überlauf habe und warum ich 64 bit für die multiplikation habe - ich schneide dann geeignet ab.
uint32 mult32(uint32* a, uint32* b)
{
uint32 iResult;
unsigned long long iResult2;
iResult = (*(uint32*)(a)) * (*(uint32*)(b));
iResult2 = *(unsigned long long*)b;
for (int i = 31; i >= 0; i--)
{
bool res = (*b) & (1 << i);
printf( "%d", res );
}
printf( " :UINT32 [mm] Number\n" [/mm] );
for (int i = 63; i >= 0; i--)
{
bool res = (iResult2) & (1 << i);
printf( "%d", res );
}
printf( " :UINT32 [mm] Number\n" [/mm] );
return iResult;
}
lg
Shadow
(Hier habe ich auch gepostet: http://www.tutorials.de/forum/c-c/356319-binaere-multiplikation-von-32-bit-zahlen-64-bit.html)
(Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.) <= Stimmt nicht, aber sonst könnte ich nicht posten
|
|
|
|
Hallo,
1.wenn du angibst wo du noch postest ist das doch in Ordnung
2. wieso probierst du das nicht mit einem Array?
Gruss Christian
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 09:27 Mo 08.03.2010 | Autor: | Loddar |
Hallo davidoffff,
!!
Siehe in dem anderem Forum. Dort hast Du nunmehr ausreichend Antwort erhalten.
Gruß
Loddar
|
|
|
|