問題タブ [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 を使用して実行時の数値精度を変更する方法
boost::multiprecisionのドキュメントから読みました:
数値の型に応じて、精度は任意に大きく (使用可能なメモリによってのみ制限される)、コンパイル時に固定される (たとえば、10 進数で 50 桁または 100 桁)、またはメンバー関数によって実行時に制御される変数になります。単純なユーザー定義型よりも優れたパフォーマンスを得るために、これらの型は式テンプレート対応です。
さらにドキュメントを読みましたが、実行時の精度の変更に関するものは何も見つかりませんでした。コンパイル時に精度を設定できるテンプレートしか見たことがありませんが、それは私が望んでいるものではありません (非常に高い倍率を使用してフラクタルをズームするプログラムを作成したい)。
実行時に精度を変更できる double 型を作成するにはどうすればよいですか?
c++ - boost::multiprecision::export_bits は、負の cpp_int 数値でスローします
cpp_int に基づく負の boost::multiprecision 数値で export_bits を呼び出すと、内部メソッド msb から例外がスローされます (「負の値の個々のビットのテストはサポートされていません」)。(ブースト1.60)
boost::multiprecision 数値の内容を抽出するにはどうすればよいですか? Boost のドキュメントによると、export_bits はデータ交換に使用するように設計されているため、サポートされている値をエクスポートできない場合、私の理解では大きな欠陥になります。
バックエンドの手足に直接アクセスすることが回避策になる可能性があることを知りましたが、変更される可能性のある内部にアクセスしています。
更新: 質問をブースト メーリング リストに投稿し、このhttps://svn.boost.org/trac/boost/ticket/12170のチケットを開きました。これは次のリリースで修正される予定です。
c++ - C++ での直交および多精度ブースト ライブラリとの統合
検索した後、私は統合のための素晴らしいコードを見つけました
直交ブースト ライブラリ。
それよりも
log(x)/(1+x)
統合したい
(poly[0]+poly[1]*x+poly[2]*x^2+...+poly[n]*x^n)*log(x)/(1+x)
. しかし、私はしません
ベクトルを挿入する方法を知っている
ポリ
に
構造体 f
または、これらの演算子をメイン関数から呼び出す方法さえも。コード :
また、double 演算子を変更する場合は、cpp_dec_float_50 演算子に
構造体 f
多くの問題が発生します。私のプロジェクトでは後者のタイプが必要です。誰でもそれを修正できますか?
編集
私はこれを試しましたが、間違っています
Patstew の提案を使用する場合の編集 2 つのエラーが発生する
c++ - const double 演算子の代わりに boost 多精度演算子を使用する
ブーストライブラリによる統合のための次のコードがあります。double 演算子を cpp_dec_float_50 演算子に変更しようとしました。
に変更された場合:
cpp_dec_float_50 operator()(cpp_dec_float_50 x) const {
関連するすべてのものをcpp_dec_float_50に変更すると、エラーのリストが表示され、ここでそれらを参照してください
誰でもそれを修正できますか?
Boost Quadrature ライブラリを持っていないユーザーは、ここからダウンロードできますhttps://github.com/coolfluid/coolfluid3/tree/master/include/boost/numeric
c++ - このメモ化されたコードが segfault を起こすのはなぜですか?
特定の n と k の第 2 種スターリング数を計算する次のコードがあります。
残念ながら、このコードを実行するとセグメンテーション違反が発生します。に挿入された最初の 87795 の値では正常に動作しているように見えますmemo
が、その後すぐにクラッシュします。具体的には、セグメンテーション違反はmap::count
、行の で発生しif (memo.count(nKPair) > 0) {
ます。多分これはサイズ不足の問題だと思ったmemo
ので、 への割り当てに次の警告を追加しましたmemo
。
しかし、それは役に立ちませんでした。また、87795 の値は、これがいつクラッシュするかを示していないことにも気付きました。いくつかの小さな変更を加えて、最初の if ステートメントを次のように変更します。
その値を 66453 に変更します。
ここで何が起こっているか知っている人はいますか?
boost - 倍精度を上げる gmp_float convert_to() はコンパイル エラーを返します
ブースト倍精度ライブラリ浮動小数点数を使用しています。の値が になるため、 agmp_float
を anにマップしてからtanh
double として取得する必要があります。使用すると、以下のスニペットに示すようにコンパイル エラーが発生します。tanh
[0, 1)
convert_to<double>()
ただし、明示的に double にキャストすると(double)sigmapped_v
うまくいきます
c++ - Boost::multiprecision::sqrt(1) が 0 を返すのはなぜですか?
Boost::multiprecision::sqrt(1) が 0 を返すようです
出力:
i == 1
mp::sqrt(i) == 0
sqrt(1) == 1 になると思います。
coliruと、gcc と Boost 1.62 を使用したローカル インストールで同じ結果が得られます。これは他の人にも起こりますか?何か不足していますか、それともバグですか?
c++ - boost::multiprecision::uint128_t sizeof は 24 です
基本的な数学 (128 / 8 = 16) は別の方法で話します。私はちょっとがっかりしていて、いくつかの答えが欲しいです-私が慣れていることから、その表記法(type_num_of_bytes_t)は変数に入れることができるデータの量だけでなく、クロスプラットフォームの固定変数サイズも記述します。後者は私見でさらに重要です。私は何を間違っていますか?
出力: 24.
私は標準の x86/64 アーキテクチャ CPU を使用しており、Windows で vs2013 を使用してコンパイルしています。
更新: ブースト バージョンは 1.61 です。
c++ - boost.multiprecision を使用してプロジェクトをコンパイルしようとすると、C2143/C2518 が発生する
私は VC2017 プロジェクトで boost.multiprecision を機能させようとして問題を抱えていました。概念実証として可能な限り単純なプロジェクトを作成しようとしました。
残念ながら、このコードはコンパイルされず、次のエラーが発生します。
これらは、boost.multiprecision を最初に使用したより複雑なプロジェクトで発生したエラーとまったく同じです。このコードを Visual Studio 2015 でコンパイルするのに問題はありませんでした。何が問題なのか、それを修正するために何をする必要があるのか 誰にもわかりませんか?
編集:
boost.asio を使用するプロジェクトは、問題なくコンパイルされます。