Boostの十進浮動小数の使い方
投稿日: 更新日:
環境
g++: 12.3.0
boost: 1.84.0
include
ソースコード上部には以下のように書かれているとします。
#include <boost/multiprecision/cpp_dec_float.hpp>
using namespace boost::multiprecision;
クラス
デフォルトで100桁と50桁のものが用意されています。
cpp_dec_float_100 // 精度100桁
cpp_dec_float_50 // 精度50桁
自分で精度を定義する際は以下のようにします。
1つ目に精度の桁数、オプションで2つ目に指数部の型を指定します。
typedef number<cpp_dec_float<200>> my_dec; // 精度200桁で構築
typedef number<cpp_dec_float<200, long>> my_dec2; // 精度200桁かつ指数部がlong型で構築
初期化
文字列、数値、整数から初期化することができます。
何も指定しない場合は0に初期化されます。
cpp_dec_float_100 pi("3.14159265358979");
cpp_dec_float_100 e(2.71828182845904);
cpp_dec_float_100 a(123);
cpp_dec_float_100 b;
演算や関数
基本的な演算はもちろん。数学的な関数も扱うことができます。
pi + e;
pi - e;
pi * e;
pi / e;
ceil(pi);
floor(pi);
log(pi);
sin(pi);
標準入出力
特に必要なことは無くそのまま扱えます。
cin >> b;
cout << b << endl;
プリミティブ型に変換
convert_to
メソッドで変換できます。
cpp_dec_float_100 a("1.5");
double d = a.convert_to<double>();