Normalerweise werden Bignums mit mehreren Wörtern implementiert, aber ich möchte die Wortgröße so portabel wie möglich auswählen. Dies ist komplizierter als es scheint - std::uint64_t
ist in vielen 32-Bit-Compilern verfügbar, aber std::uint32_t
wäre wahrscheinlich eine bessere Wahl auf einem 32-Bit-Rechner. Also wäre die Versuchung dann, std :: size_t zu verwenden, aber es gibt keine Garantie für eine gegebene Architektur, dass std::size_t
der effizienteste Typ für Arithmetik ist, zum Beispiel wäre std::size_t
32-Bits, aber std::uint64_t
wäre immer noch die beste Wahl.Ermittlung der effizientesten Wortgröße für die Implementierung von Bignums in C++ 11?
C++ 11 hat schnell/am wenigsten Typen verschiedener Größen definiert, aber es gibt keine Möglichkeit, die relative Leistung von ihnen abzufragen. Mir ist klar, dass es möglicherweise keine beste portable Antwort gibt, meine beste Schätzung ist jetzt, auf std::size_t
voreinzustellen und außergewöhnliche Architekturen zur Konfigurationszeit zu entdecken. Aber vielleicht gibt es einen besseren Weg?
Nun, ich denke uint_fast32_t oder uint_fast64_t könnten die besten Lösungen sein. Es wird zumindest Geschwindigkeit und mindestens 32/64 Bit für Ihre Datentypen sicherstellen. Dafür sind sie bestimmt bestimmt. – Morwenn
"* C++ 11 mandates dass std :: uint64_t zum Beispiel existiert *" Nein, tut es nicht. Es ist optional. Auch: "* aber std :: uint32_t wäre wahrscheinlich eine bessere Wahl auf einer 64-Bit-Maschine *" Ich nehme an, Sie meinten "** 32-Bit ** Maschine" –
@NicolBolas: Ups, Sie sind in beiden Punkten richtig. –