Zazwyczaj bignum są realizowane za pomocą wielu słów, ale chciałbym wybrać rozmiar słowa tak przenośnie, jak to możliwe. Jest to trudniejsze, niż mogłoby się wydawać - std::uint64_t
jest dostępne w wielu kompilatorach 32-bitowych, ale prawdopodobnie lepszym wyborem byłby 32-bitowy komputer. Tak więc pokusą byłoby użycie std :: size_t, ale nie ma gwarancji dla danej architektury, że std::size_t
jest najbardziej wydajnym typem dla arytmetyki, na przykład na the new x32 Linux ABIstd::size_t
będzie 32-bitowy, ale std::uint64_t
nadal będzie najlepszym wyborem.Określanie najbardziej efektywnego rozmiaru słowa do implementacji binarnych w C++ 11?
C++ 11 ma zdefiniowane szybkie/najmniej różne typy różnych rozmiarów, ale nie daje żadnego sposobu na zapytanie o ich względną wydajność. Zdaję sobie sprawę, że może nie być najlepszej przenośnej odpowiedzi, teraz domyślam się, że domyślnie jest std::size_t
i wykrywam wyjątkowe architektury w czasie konfiguracji. Ale może jest lepszy sposób?
Myślę, uint_fast32_t lub uint_fast64_t może być najlepsze rozwiązanie. Zapewni to przynajmniej szybkość i co najmniej 32/64 bitów dla typów danych. Zapewne to są ich przeznaczeniem. – Morwenn
"* C++ 11 upoważnia, że std :: uint64_t istnieje na przykład *" Nie, nie działa. To opcjonalne. Ponadto: "* ale std :: uint32_t prawdopodobnie byłby lepszym wyborem na 64-bitowej maszynie *" Zakładam, że masz na myśli "** 32-bitowy ** komputer" –
@NicolBolas: Ups, masz rację w obu przypadkach. –