C ++中的任意精度算术是否有编译时库(模板元编程)?
我需要这个来帮助我的AVR微控制器程序中的定点算术和二进制缩放。例如,当两个数字各自具有自己的边界时,bignums将用于计算结果的边界,并在适当时移动输入和/或输出中的分数点。但结果的界限可能无法在标准整数类型中表示。
答案 0 :(得分:0)
可能Boost.Multiprecision正是您要找的。 p>
答案 1 :(得分:0)
由于在编译时不允许动态分配,因此只能在运行时使用任意长的类型。这就是为什么std::string
或std::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,您应该询问如何执行这些定点运算