C ++编译时bignum库

时间:2013-05-24 15:29:18

标签: c++ template-meta-programming compile-time fixed-point bignum

C ++中的任意精度算术是否有编译时库(模板元编程)?

我需要这个来帮助我的AVR微控制器程序中的定点算术和二进制缩放。例如,当两个数字各自具有自己的边界时,bignums将用于计算结果的边界,并在适当时移动输入和/或输出中的分数点。但结果的界限可能无法在标准整数类型中表示。

2 个答案:

答案 0 :(得分:0)

可能Boost.Multiprecision正是您要找的。

答案 1 :(得分:0)

由于在编译时不允许动态分配,因此只能在运行时使用任意长的类型。这就是为什么std::stringstd::vector之类的标准类型没有任何constexpr构造函数的原因。任意精度数学也是如此。一种解决方法是将变量声明为static,以便在启动时仅计算一次

但是,如果您知道值的范围,则可以使用ctbignum,它是用于多精度编译时和运行时算术(包括模块化算术)的

  

Constexpr C++17 Big-Integer / Finite-Field library

     

这是仅标头的模板库,用于固定宽度的“小整数”计算,可在运行时和编译时使用。 “小大整数”是指通常在密码学应用中出现的具有几个分支的数字(换句话说,几百个比特)。

Boost.MPL可能是已知限制的另一种选择

在C ++ 20 some kind of dynamic allocation in constexpr functions is allowed中,因此可能会有一个真正的编译时bignum库

但是我不认为任意精度是解决定点算法的解决方案。这完全违背了目标,您可以从一开始就简单地使用浮点数。因此,这很可能是XY problem,您应该询问如何执行这些定点运算