64 bit Überlauf



  • knivil schrieb:

    Schreibe dir einfach eine eigene Klasse int128 ...

    Super Idee, und wie multipliziert er dann da rein? 🤡



  • Indem er einen geeignete Multiplikation definiert, dann zwei Objekte fuer 128 Bit Integer nimmt, mit den 64 Bit Integer initialisiert und ... tata ... multipliziert.



  • Und wie implementiert er die Multiplikation in der Klasse?



  • Indem er es genauso macht wie in BigInteger-Bibliotheken ... sicher geht es performanter, z.B.: http://svn.gnucash.org/docs/HEAD/group__Math128.html


  • Mod

    Bashar schrieb:

    Und wie implementiert er die Multiplikation in der Klasse?

    64_Bit_A * 64+Bit_B
    = ((32_Bit_A_high << 32) + (32_Bit_A_low)) * ((32_Bit_B_high << 32) + (32_Bit_B_low))
    = (32_Bit_A_high * 32_Bit_B_high << 64) + (32_Bit_A_high * 32_Bit_B_low << 32) + (32_Bit_A_low * 32_Bit_B_high << 32) + (32_Bit_A_low * 32_Bit_B_low)
    

    Damit hat man als Überlauf den Teil (32_Bit_A_high * 32_Bit_B_high) plus jeweils die höheren 32-Bit der beiden (64-Bit) Multiplikationsergebnisse 32_Bit_A_high * 32_Bit_B_low und 32_Bit_A_low * 32_Bit_B_high . Dies ist somit sowohl die Lösung der eingangsfrage des TE als auch für knivils 128-Bit-Klasse.

    edit: Es kann natürlich noch sein, dass die ganzen unteren Beiträge in der Summe auch noch überlaufen, das muss man auch noch mitnehmen.

    edit2: Und das ist, wie ich nun sehe, im Prinzip schon das was knivil als fertigen Quellcode verlinkt hat, bloß dass die auch noch an negative Zahlen u.ä. gedacht haben. Aber wenigstens schön zu sehen, dass meine Überlegung nicht total falsch war.



  • Dann kann er das ja auch so machen, ohne sich eine 128-Bit-Klasse zu basteln. Danke für die Antworten 🙄


  • Mod

    Bashar schrieb:

    Dann kann er das ja auch so machen, ohne sich eine 128-Bit-Klasse zu basteln.

    Wenn wir den Threadersteller fragen, warum er das überhaupt wissen möchte, kommt bestimmt, dass er so eine Klasse schreibt.



  • Das macht die Antwort, er solle sich doch einfach so eine Klasse basteln, noch schwachsinniger.



  • SeppJ schrieb:

    edit2: Und das ist, wie ich nun sehe, im Prinzip schon das was knivil als fertigen Quellcode verlinkt hat, bloß dass die auch noch an negative Zahlen u.ä. gedacht haben. Aber wenigstens schön zu sehen, dass meine Überlegung nicht total falsch war.

    Und genau das, was ich als Beispielfunktion gepostet habe. 😉



  • Bashar schrieb:

    Das macht die Antwort, er solle sich doch einfach so eine Klasse basteln, noch schwachsinniger.

    Es ging darum, wenn es keinen solchen Typ gibt, sich diesen eben definiert. Und wenn er soweit ist, dass er mal schaut, wie andere dann die Multiplikation definieren. Dann kommt man viel leichte auf den Suchstring bei Google: 128 Bit Klasse ... und dann schaut man sich diejenigen an, die eine Multiplikationsoperation implementieren. Auch wenn du meinen Vorschalg fuer schwachsinnig haelst, so war er als Hilfe zur Selbsthilfe gedacht.


Anmelden zum Antworten