二項係数を までの整数として計算したいと思いnumberLeaves=100, K=10
ます。これは、約 128 ビットの整数に格納できるはずです。
boost::multiprecision::cpp_int
したがって、結果を保存するために使用し、boost::math::binomial_coefficient<boost::multiprecision::cpp_int>
それを計算するために使用したいと思います。
// Invalid because the template argument must be a floating-point type!
boost::multiprecision::cpp_int number_branch_combinations =
boost::math::binomial_coefficient<boost::multiprecision::cpp_int>(numberLeaves, K);
残念ながら、二項係数は整数ですがboost::math::binomial_coefficient
、戻り値が浮動小数点型でなければならないため、上記のコードは無効です。
...テンプレートの引数は float や double などの実数値型でなければならず、整数型ではありません。簡単にオーバーフローしてしまいます!
前述のように、私の場合、二項係数計算の結果が約 128 ビット以内に収まることを期待しています。これを整数にしたいと考えています。
boost::multiprecision::cpp_dec_float
したがって、テンプレート引数として に渡し、(丸めによって) 浮動小数点の戻り値から最も近い整数に変換することを検討しboost::math::binomial_coefficient
ました。
残念ながら、 a から a に変換する方法が見つかりませboost::multiprecision::cpp_dec_float
んboost::multiprecision::cpp_int
。非可逆変換の実行は、ライブラリによって厳密に禁止されているようです。boost::multiprecision
cpp_int cppi(2);
cpp_dec_float_50 df(cppi); // OK, int to float
df = static_cast<cpp_dec_float_50>(cppr); // OK, explicit rational to float conversion
// However narrowing and/or implicit conversions always fail:
cppi = df; // Compiler error, conversion not allowed
現在、二項係数を計算し、値を整数として返す独自の関数を単純に作成中です。
boost::math::binomial_coefficient
二項係数を計算して として返すために使用できる方法が文字通り存在しないとは信じがたいboost::multiprecision::cpp_int
です。
boost::math::binomial_coefficient
二項係数を計算し、それを として返すために使用することは可能boost::multiprecision::cpp_int
ですか?