問題タブ [mpfr]
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++ - MPFR を使用した異なる精度の非正規数
さまざまなnビットのバイナリ浮動小数点形式をエミュレートしたいと思います。それぞれに指定されたe_maxとe_minがあり、pビットの精度があります。これらの形式で、IEEE-754 標準に忠実な非正規数をエミュレートしたいと考えています。
当然のことながら、検索の結果、IEEE-754 に準拠し、関数でサブノーマルをサポートできる MPFR ライブラリにたどり着きましたmpfr_subnormalize()
。ただし、サブノーマル対応環境を正しくセットアップするためにmpfr_set_emin()
と を使用すると、いくつかの混乱に遭遇しました。mpfr_set_emax()
これは MPFR マニュアルで使用されている例であるため、サンプル形式として IEEE 倍精度を使用します。
http://mpfr.loria.fr/mpfr-current/mpfr.html#index-mpfr_005fsubnormalize
上記のコードは、上記のリンクの MPFR マニュアルからのものです。e_maxもe_minもの期待値と等しくないことに注意してくださいdouble
。ここで、pはdouble
タイプから予想されるように 53 に設定されていますが、e_maxは正しい値の 1023 ではなく 1024 に設定されており、e_minは -1073 に設定されています。-1022 の正しい値を大きく下回っています。指数の境界をきつく設定しすぎると、MPFR の中間計算でオーバーフロー/アンダーフローが発生することは理解していますが、e_minを正確に設定することが正しい非正規数を確保するために重要であることがわかりました。高すぎたり低すぎたりすると、MPFR の結果 ( で更新mprf_subnormalize()
) が対応する結果とは異なります。double
結果。
私の質問は、指数境界e_maxとe_minを持つ浮動小数点形式の正しい非正規動作を保証するために、どの値をmpfr_set_emax()
and (特に)に渡すかをどのように決定する必要があるかということです。この問題に関する詳細な文書や議論はないようです。mpfr_set_emin()
心より感謝申し上げます。
ジェームズ。
EDIT 30/07/16: これは、単精度数のe_maxとe_minの選択を示す小さなプログラムです。
julia - Juliaのexp関数は0に評価されます
Juliaで波動関数の確率密度を計算してプロットしたい. 次の関数を評価するために、Julia コードの小さなスニペットを書きました。
ジュリア(不完全)コードは次のとおりです。
私が評価する最後の行t
は0.000000000000...
. BigFloat の精度も設定してみました。運が悪い!私は何を間違っていますか?助けていただければ幸いです。
c++ - MPFR からファイルに出力
計算結果MPFR
をファイルに出力したいのですが、方法がわかりません。MPFR
高精度の浮動小数点演算を行うために使用されます。数値を印刷するmpfr_t
には、次の関数を使用します。
size_t mpfr_out_str (FILE *stream, int base, size t n, mpfr t op, mp rnd t rnd)
私の問題は、FILE*
オブジェクトと、それらがオブジェクトにどのように関連しているかを理解していないことだと思いfstream
ます。
行を変更my_file
すると、期待どおりに番号が画面に出力されますが、ファイルに取得する方法がわかりません。mpfr_out_str
stdout
c++ - MPFR C++ 整数のような浮動小数点数を表示
MPFR C++ を使用してプログラムのコンパイルに成功したばかりで (1 回目)、かなり大きな数を出力する必要がありますが、それらは整数ではなく工学表記としてのみ出力されます。私が読んだところによると、ライブラリは (任意の) 整数用に最適化されていないため、浮動小数点数を整数として使用しても問題ありません。私は C++ の初心者にすぎないので、利用可能なすべてのツールを使用する方法はわかりませんが、(大きな) 浮動小数点数を整数であるかのように出力する方法はありますか? 例として、 (say) の代わりに1.12276e+44
print 112275575285571389562324404930670903477890625
. を試してみるstd::cout.precision(44)
と が得られますが1.12275575285571389562324404930670903477890625e+44
、見栄えは良くありません。
python - Python の多精度有理比較: Fraction、mpq、mpfr
浮動小数点計算はその性質上、正確ではないことを理解しています。多精度配給比較を行うための最良のライブラリ/方法を見つけようとしています。Fraction、mpq、mpfr を比較しています。後の 2 つは gmpy2 ライブラリからのものです。最初のものは分数パッケージからのものです。私はpython3.3を使用しています
これは私が比較に使用したスクリプトです。あまりうまく書かれていませんが、非常に単純なものです。
結果は次のとおりです。
つまり、基本的に Fraction が最も正確であるという結果を得ましたが、非常に遅いです。この質問に対して、私が聞きたかったのは、
- 私も試してみるべきだと思う他のケースはありますか?
- 他のライブラリ?
- 速度が重要な場合、gmpy2 ライブラリを使用して精度を向上させる方法はありますか?
c++ - std::vector を使用して動的に割り当てられた mpfr_t 行列
mpfr_t 要素のマトリックスとして機能するクラスが必要です。STL ベクトルは、必要な数だけ動的に割り当てるのに最適なアイデアだと思いましたが、ここでいくつかのエラーが発生します。
エラーは次のとおりです。
私は本当にこれを調べました、そして私はそれを理解することができません。作品を作る方法はありvector< vector<mpfr_t> >
ますか?誰が何が起こっているのか知っていますか?