最近写代码经常要用到 2^512 大小的整数,网上有许多写得很好的大整数类。可是,代码也只能是 bit 串运算,或者是把 int32 看作进位单元。这样的代码写得再好,效率还是有损失。为什么 C++ 至今没有推出基于底层的巨型 int 类型?


实际上在c++ 11的提案中,N1744提案就已经提出要在STL中扩展big integer,但最终没有被采纳。这个proposal目前还是open状态,不排除未来会进入STL。

These papers have been reviewed by the LWG, and while not yet compelling enough to plan for a future TR, they have not been outright rejected either. Authors are welcome to update and resubmit.

没有被明确reject,至于原因,只是说这个提案的实现目前还不引人注目。

其实,想使用big integer类型,C++方案很多,比如,Boost.Multiprecision就很完善。


可能是担心Java在ACM里消失


只要不是CPU直接支持相关的大数指令,你以为编译器给你搞一个扩展内部实现就不是拿一些基础类型凑出来的么(比如32位机器上的long long就是两个int32扩展出来的「大数」)?当然,编译器实现的往往比大多数人手写的强那倒是实话。


效率没有损失的只能是内建大整数类型,而不是标准库级别的大整数类。编译程序开发商可能还顾不上这个小需求。


目前来看,即使加入也只是以库的形式,还是拿多个int拼出来


你在 32 位程序里用 uint64_t 也是用两个 uint32_t 拼的好吧,语言标准跟你 CPU 支持的整数位数有什么关系。


推荐阅读:
相关文章