不使用cpp_bin_float_(50/100)时,Boost多精度cpp_float无法正常工作



我需要以比doubles更高的精度进行计算,并且为此使用boost::multiprecision。当我使用boost::multiprecision::cpp_bin_float_50boost::multiprecision::cpp_bin_float_100时,这可以非常好地工作。所以简单地做一些类似的事情

#include <boost/multiprecision/cpp_bin_float.hpp>
// ...
boost::multiprecision::cpp_bin_float_100 Test1, Test2;
Test1 = 1.0;
Test2 = 2.0;
Test1 = Test1 + Test2;

工作。但我需要不同的精度。例如,我只想做一些类似的事情

boost::multiprecision::cpp_bin_float<200> Test1, Test2;
Test1 = 1.0;
Test2 = 2.0;
Test1 = Test1 + Test2;

虽然前三行很好,但我在第四行出现了一个错误,说";没有找到匹配的运算符";。此外,.convert_to<double>()也找不到,我稍后需要它。cpp_dec_float也是如此。。。

我确信,我错过了一些愚蠢的东西。有人能帮忙吗?

编辑:

谢谢你,我只是想编辑完全一样的东西。我花了很长时间才发现。有趣的是,我找不到一个关于如何使用除…之外的任意长度的示例_50或_100…

boost::multiprecision::cpp_bin_float<200>类型是后端类型。你想要一个前端类型,例如

number<cpp_bin_float<200> >

您可以将其与工作类型的定义进行比较:

using cpp_bin_float_50 = number<backends::cpp_bin_float<50> > ;
using cpp_bin_float_100 = number<backends::cpp_bin_float<100> >;

后端定义实现,其中前端提供您所期望的可用性接口,如运算符重载。

实时演示

#include <boost/multiprecision/cpp_bin_float.hpp>
namespace bmp = boost::multiprecision;
int main() {
bmp::number<bmp::cpp_bin_float<200>> v(0);
v += 2.0;
v = pow(v, 156);
std::cout << std::fixed << v;
}

打印:

91343852333181432387730302044767688728495783936.000000

相关内容

  • 没有找到相关文章

最新更新