Shift and Add Algorithmus



  • 64Bit variable wäre ja unsigned long long oder??



  • _verzweifelt schrieb:

    64Bit variable wäre ja unsigned long long oder??

    Kennst du sizeof ?



  • Folgende zwei dezimale Zahlen habe ich:
    Zahl1: 13107200
    Zahl2: 11534336

    Die möchte ich multipizieren aber die passen nichteinmal in unsigned long long rein!

    Wie kann ich das sonst machen?



  • Du wiederholst dich...

    Sag mal, willst du hier rumtrollen oder bist du an ernsthafter Hilfe interessiert? 🙄



  • Nein ich verstehe nicht was an meiner frage so unverständlich ist daher habe ich sie nochmals gepostet!



  • natürlich passen die rein...

    potenzregel nr. <kA> ^^
    2^a * 2^a = 2^2a
    ->
    2^32 * 2^32 = 2^64

    also für dich:
    32bit * 32bit = 64bit

    bb



  • unsigned long long gibts nur in ISO-C99 nicht in ISO-C++98.



  • Also würde das nur unter c funktionieren?



  • _verzweifelt schrieb:

    Nein ich verstehe nicht was an meiner frage so unverständlich ist daher habe ich sie nochmals gepostet!

    Diese wurde aber bereits beantwortet. Aber statt auf die Antworten einzugehen oder wenigstens zu versuchen, seine Frage besser zu formulieren, wenn sie nicht verstanden wird, stellt man sie einfach nochmals gleich. Wirklich sehr hilfreich.

    Du hast doch hoffentlich verstanden, was ich mit meinem ersten Post aussagen wollte? Falls nicht: Wenn du willst, dass wir dir bei deinem Problem helfen können, brauchen wir mehr Informationen als "geht nicht" und "müsste doch gehen".



  • Ok. Nochmals die Frage:

    Ich habe von zwei Gleitkommazahlen die normierten Mantissen ausgerechnet die 23Bit lang sind.

    Und jetzt möchte ich diese 2 Mantissen mitteinander multiplizieren!
    So jetzt wollte ich das ergebniss in eine unsigned long long schreiben.

    Mit "es geht nicht" meinte ich das, das ergebniss von dieser Multiplikation 0 ist.

    Daher kam ich zu diesen forum ob es eine andere Möglichkeit gibt solche zahlen zu multiplizieren da ich am ende sowieso nur eine 23Bit zahl brauche.

    Besser gesagt ich kürze das Ergebniss dieser Multiplikation sowieso auf 23Bit.

    Ich hoffe das war verständlicher



  • _verzweifelt schrieb:

    23Bit lang

    Du meinst 32, oder? Nur, weil bei dir gerade drei Mal 23 steht... 😉

    _verzweifelt schrieb:

    Mit "es geht nicht" meinte ich das, das ergebniss von dieser Multiplikation 0 ist.

    Ja, das habe ich auch noch mitbekommen. Leider ändert das nichts daran, dass wir dir nicht sagen können, was du falsch machst. Denn zwei 32-Bit-Zahlen sollten in einer 64-Bit-Zahl Platz haben, von daher muss etwas an deinem Algorithmus falsch sein.

    Und eben dieser Fehler wird so lange existieren, bis du ihn entweder selbst behebst oder dir jemand dabei hilft. Und letzteres ist nur bei genauer Beschreibung möglich. Verständlich?



  • es ist also nicht die aufgabe an sich, einen shift und add algorithmus selbst zu implementieren, sondern du willst lediglich 2 zahlen miteinander multiplizieren?!

    Zeig mal ein wenig Code und dann sag mal, wieso du nur die Mantissen miteinander multiplizieren möchtest...
    Ansonsten würde das relativ einfach gehen, da in C++ ja eine implizite Typkonvertierung stattfindet:

    /*
    mantisse_1 und mantisse_2 sind iwelche zu einem ganzzahligen Datentyp konvertierbare Zahlen
    */
    unsigned long long int a = mantisse_1;
    unsigned long long int b = mantisse_2;
    unsigned long long int a_b = a*b;
    

    vorausgesetzt, du hast die mantissen aus dem float richtig rausbekommen, ist a_b auch das richtige ergebnis...

    bb


Anmelden zum Antworten