問題タブ [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.
c++ - boost::multiprecision を使用した単体テスト
多倍精度を有効にするために一部のコードを適応させてから、一部の単体テストが失敗し始めました。ヘッダー ファイル:
メインのテスト ファイル:
FLOAT
タイプとして定義するとdouble
、すべてのテストがパスすることに注意してください。私を混乱させるのは、正確な期待値と実際の値を出力すると (AreaTest1 を参照)、同じ結果が表示されることです。しかし、から報告されたエラーBOOST_TEST
は次のとおりです。
でコンパイルしg++ SCRATCH_UnitTestBoost.cpp -o utb.o -lboost_unit_test_framework
ます。
質問:
- テストが失敗するのはなぜですか?
- ここ
tolerance
に記載されているようにin を使用してAreaTestTol
も出力が得られないのはなぜですか?
関連情報:
random - boost::固定シードと可変精度の多精度乱数
rng 内で固定シードを使用すると、精度が変化すると結果が再現できなくなります。つまり、テンプレート引数cpp_dec_float<xxx>
を変更して次のコードを実行すると、(精度の変更ごとに) 異なる出力が表示されます。
合理的だと思います。n
しかし、桁数の精度の場合、固定シードが桁数に対して定義されている桁内x
と同等の数値を生成するようにするにはどうすればよいですか? 例えばy
n
y
n+1
c++ - boost::multiprecision::pow を固定精度でオーバーロードする
次のコード
boost::multiprecision::pow
は固定精度型を認識しないため、コンパイルできません。これに対する通常の解決策は何ですか?pow
多精度型と固定精度型の両方を受け入れる単一の関数が必要です。たとえば、ブースト定数にテンプレート定義があるのは奇妙です。
うまく動作します。オーバーロードするべきではboost::multiprecision::pow
ありませんか?
c++ - cpp_int のビットの設定
ばかげた質問ですが、ライブラリcpp_int
からビットを設定boost
すると、通常の数値と同じように機能しますか?
たとえば、次のように数値にいくつかのビットを設定しようとしました。
私が持っている方法は、最もtoBinary(cpp_int&x)
簡単な方法で数値からビットを取得します:
最初に 14 のゼロを失うことは理解できますが、理解できないのは、なぜ 14 ではなく 20 ビット全体を失うのかということです。私はboost
ライブラリにかなり慣れていないので、おそらく初歩的な間違いです。
c++ - boost::multiprecision::cpp_int がコピーされ、印刷しようとするたびに削除されます
Boost から出力するcpp_int
と、オブジェクト全体がコピーされたように見えます。
紛らわしいのは、印刷のオーバーロードが であるということですが、などの関数にostream& operator<<(ostream&, const T&)
渡しても、新しいメモリ割り当ては表示されません。私も試しましたが、これも2番目のメモリ割り当てを引き起こします。*u
template <typename T> void cr(const T&) {}
u->str()
私はまた、のcoutをオーバーロードしようとしましたcpp_int
:
しかし、結果は同じでした。ただし、既にオーバーロードがあると予想していたので、これがコンパイルされたことにも驚いています。私の推測では、バックエンドをさらに変更する必要があるかもしれません。
どうすればこれを回避できますか? を印刷するたびに 30 バイト以上をコピーしてから削除したくありませんcpp_int
。
そうでない場合は、インターフェイスが最小限のリファクタリングで類似している限り、データ型を切り替えることは問題外ではありません。