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>();

書いた人

profile_image

お茶の葉

物理とプログラミングが好きな人