Variabel große Zahlen



  • Hallo,

    Neulich als ich eine Funktion optimieren wollte, dachte ich mir, dass es eigentlich Speicherverschwendung ist ein int zu nehmen, wo die Variabel sowieso maximal nur bis 325 kommt.
    Immerhin würden 9 Bit locker ausreichen, anstatt den 32 eines ints. Dabei kam mir die Idee einer Klasse die ein über Templates in der Länge festgelegtes bool-Array verwaltet um variable lange Zahlen nachzubilden. Damit könnte man in meinem Fall die 23 Bit in meinem Algorithmus sparen (ok, wenn ich das so schreibe, merke ich selber wie lächerlich das eigentlich klingt... 😃 ). Andereseits könnte man damit auch riesige Integer bequem verwalten...
    Gibt es sowas in der Richtung schon oder ist das komplett überflüssig?
    lg
    Nathan



  • Es gibt Bibliotheken für speziell grosse Klassen. Es gibt in der Standardbibliothek Bitsets, um Bits direkt anzusprechen. Mit denen kannst du aber nicht rechnen, sondern boolsche Algebra betreiben.

    Allerdings bezweifle ich stark, dass du sowas wirklich brauchst. Du solltest dir bewusst sein, dass so ein Bitgefrickel erhebliche Laufzeitnachteile mit sich bringen kann. Sofern du also genügend RAM hast, sehe ich keinen Sinn darin, den Algorithmus komplizierter und langsamer zu machen.



  • Ja, das habe ich mittlerweile auch eingesehen, als ich weiter über eine Implementierung nachgedacht habe...
    Aber diese Bibliotheken für besonders große Zahlen müssten intern eigentlich ähnlich aufgebaut sein, oder?



  • Dafür gab es bei C Bitfelder.
    z.B.
    http://kurse.eichelsdoerfer.net/c_cpp/0603.html

    Ist aber natürlich langsamer.(habs selber nie benutzt)
    Vermute das war relevanter als man nicht so viel Ram zur Verfügung hatte.



  • Also ich bezog mich natürlich auf den "9 bit vs 16/32" Part.



  • Nathan schrieb:

    Aber diese Bibliotheken für besonders große Zahlen müssten intern eigentlich ähnlich aufgebaut sein, oder?

    Ich denke, die sind eher auf Geschwindigkeit als Speicherverbrauch optimiert. D.h., wenn man nun 33 Bit bräuchte, nimmt man einen 64-Bit-Typ. Bei grösseren Zahlen werden wohl mehrere kleinere zusammengesetzt, die werden nicht alle Grundrechenarten auf Bit-Ebene neu implementieren. Sowas wäre in Software langsamer als die für herkömmliche Typen optimierten Assemblerbefehle.


Anmelden zum Antworten