10

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

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

4

2 回答 2

0

可能Boost.Multiprecision是您正在寻找的。

于 2013-05-26T07:30:35.850 回答
0

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

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

Constexpr C++17 大整数/有限域库

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

当限制已知时,Boost.MPL可能是另一种选择

在 C++20中允许在 constexpr 函数中进行某种动态分配,因此可能会有一个真正的编译时 bignum 库

但我不认为任意精度是解决定点算术的解决方案。这完全违背了目的,您可以从一开始就简单地使用浮点数。所以这可能是一个XY 问题,你应该问如何做那些定点操作

于 2019-12-20T14:26:37.647 回答