Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;编译时bignum库 < C++ > 中是否有任何用于任意精度算术的编译时库(模板元编程)?_C++_Template Meta Programming_Compile Time_Fixed Point_Bignum - Fatal编程技术网

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

C++;编译时bignum库 < C++ > 中是否有任何用于任意精度算术的编译时库(模板元编程)?,c++,template-meta-programming,compile-time,fixed-point,bignum,C++,Template Meta Programming,Compile Time,Fixed Point,Bignum,我需要这个来帮助我的AVR微控制器程序中的定点算术和二进制缩放。例如,当两个分别具有各自边界的数字相乘时,bignum将用于计算结果的边界,并根据需要移动输入和/或输出中的小数点。但是,结果的边界可能无法在标准整数类型中表示。可能就是您想要的。由于编译时不允许动态分配,因此您只能拥有在运行时任意长的类型。这就是像std::string或std::vector这样的标准类型没有任何constexpr构造函数的原因。这同样适用于任意精度的数学。解决方法是将变量声明为静态,以便在启动时只计算一次 但是

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

可能就是您想要的。

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

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

这是一个仅用于固定宽度“小-大整数”计算的头模板库,用于运行时和编译时。所谓“小-大整数”,我们指的是具有几个分支(换句话说,几百位)的数字,通常出现在加密应用程序中

当知道极限时,可能是另一种选择

在C++20中,因此可能会有一个真正的编译时bignum库


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

您所说的“模板元编程”是什么意思?“BigInteger”类型的库实际上总是使用动态内存分配。否则,您可以使用一个更大的类型(即有符号int64乘以两个有符号int32)@DarkWanderer,我的意思是,模板元编程。此链接应该让您了解如何在编译时实现bignums:。本质上,编译时bignum是一种(递归)类型,编译器将处理内存分配。@darkwander一个大整数类型是不够的-我的问题是在编译时处理类型的边界,我需要让编译时按照“a+BINT64_MIN”的思路进行检查。编译时bignum允许“直接”编写它们,而不必担心整数溢出。我希望看到这样的库。文档指定“但是,您将无法对此类类型执行编译时算术。”