問題タブ [boost-multiprecision]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
164 参照

c++ - boost::multiprecision を使用した単体テスト

多倍精度を有効にするために一部のコードを適応させてから、一部の単体テストが失敗し始めました。ヘッダー ファイル:

メインのテスト ファイル:

FLOATタイプとして定義するとdouble、すべてのテストがパスすることに注意してください。私を混乱させるのは、正確な期待値と実際の値を出力すると (AreaTest1 を参照)、同じ結果が表示されることです。しかし、から報告されたエラーBOOST_TESTは次のとおりです。

でコンパイルしg++ SCRATCH_UnitTestBoost.cpp -o utb.o -lboost_unit_test_frameworkます。

質問:

  1. テストが失敗するのはなぜですか?
  2. ここtoleranceに記載されているようにin を使用してAreaTestTolも出力が得られないのはなぜですか?

関連情報:

  1. 浮動小数点比較による公差
  2. 多精度型に関する落とし穴
0 投票する
2 に答える
76 参照

random - boost::固定シードと可変精度の多精度乱数

rng 内で固定シードを使用すると、精度が変化すると結果が再現できなくなります。つまり、テンプレート引数cpp_dec_float<xxx>を変更して次のコードを実行すると、(精度の変更ごとに) 異なる出力が表示されます。

合理的だと思います。nしかし、桁数の精度の場合、固定シードが桁数に対して定義されている桁内xと同等の数値を生成するようにするにはどうすればよいですか? 例えばynyn+1

0 投票する
2 に答える
163 参照

c++ - boost::multiprecision::pow を固定精度でオーバーロードする

次のコード

boost::multiprecision::powは固定精度型を認識しないため、コンパイルできません。これに対する通常の解決策は何ですか?pow多精度型と固定精度型の両方を受け入れる単一の関数が必要です。たとえば、ブースト定数にテンプレート定義があるのは奇妙です。

うまく動作します。オーバーロードするべきではboost::multiprecision::powありませんか?

0 投票する
1 に答える
87 参照

c++ - cpp_int のビットの設定

ばかげた質問ですが、ライブラリcpp_intからビットを設定boostすると、通常の数値と同じように機能しますか?

たとえば、次のように数値にいくつかのビットを設定しようとしました。

私が持っている方法は、最もtoBinary(cpp_int&x)簡単な方法で数値からビットを取得します:

最初に 14 のゼロを失うことは理解できますが、理解できないのは、なぜ 14 ではなく 20 ビット全体を失うのかということです。私はboostライブラリにかなり慣れていないので、おそらく初歩的な間違いです。

0 投票する
1 に答える
100 参照

c++ - boost::multiprecision::cpp_int がコピーされ、印刷しようとするたびに削除されます

Boost から出力するcpp_intと、オブジェクト全体がコピーされたように見えます。

紛らわしいのは、印刷のオーバーロードが であるということですが、などの関数にostream& operator<<(ostream&, const T&)渡しても、新しいメモリ割り当ては表示されません。私も試しましたが、これも2番目のメモリ割り当てを引き起こします。*utemplate <typename T> void cr(const T&) {}u->str()

私はまた、のcoutをオーバーロードしようとしましたcpp_int:

しかし、結果は同じでした。ただし、既にオーバーロードがあると予想していたので、これがコンパイルされたことにも驚いています。私の推測では、バックエンドをさらに変更する必要があるかもしれません。

どうすればこれを回避できますか? を印刷するたびに 30 バイト以上をコピーしてから削除したくありませんcpp_int

そうでない場合は、インターフェイスが最小限のリファクタリングで類似している限り、データ型を切り替えることは問題外ではありません。