通常 bignums 是通过使用多个单词来实现的,但我想尽可能便携地选择单词大小。这比看起来更棘手——std::uint64_t
在许多 32 位编译器中都可用,但std::uint32_t
在 32 位机器上可能是更好的选择。因此,诱惑将是使用 std::size_t,但不能保证给定架构std::size_t
是最有效的算术类型,例如在新的 x32 Linux ABI std::size_t
上将是 32 位,但std::uint64_t
仍然是最佳选择.
C++11 定义了各种大小的快速/最小类型,但它没有提供任何查询它们相对性能的方法。我意识到可能没有最好的可移植答案,我现在最好的猜测是std::size_t
在配置时默认并检测异常架构。但也许有更好的方法?