我需要進行比雙精度精度更高的計算,為此我正在使用 boost::multiprecision。boost::multiprecision::cpp_bin_float_50當我使用or時,這作業得很好boost::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...
我敢肯定,我在這里遺漏了一些愚蠢的東西。有人可以幫忙嗎?
編輯:
謝謝你 sehe - 我只是想編輯完全相同的東西。我花了很長時間才發現這一點。有趣的是我找不到一個例子來說明如何使用除 ..._50 或 ..._100... 以外的任意長度...
uj5u.com熱心網友回復:
該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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/537137.html
標籤:C 促进多精度
