問題タブ [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++ - cpp_dec_float を指数表記で末尾のゼロなしで出力します
私はcpp_dec_float
任意の精度で使用していますが、それは素晴らしいのですが、すべての有効数字を出力する方法がわかりません。
たとえば、このコードを使用してセットアップします
そして、単純に印刷すると
結果は7.071068e-01
です。
私が壊れた場合
私は得る7.0710678118654752440084436210484903928483593768847403658833986900000000000000000000000000000000000000e-01
。精度を落とさなくてよかったのですが、スペースの節約にはなりません。
既存のツールで精度を失うことなく末尾のゼロを削除する方法はありますか? そうでない場合、結果の文字列から末尾のゼロを削除するにはどうすればよいですか?
私の意図を満たすために既存のツールを使用できる場合、cpp_dec_float
精度を失わず、文字列の末尾のゼロを削除せずに科学表記法で出力するにはどうすればよいでしょうか? ストリームの例しか見つかりません。
クローザー
モックインターフェイスのおかげで、私はずっと近くにいます。
コードを次のように変更しました。
潜在的に無制限の長さを持つこと。ただし、これは印刷されます。
これは近いですが奇妙に思えます。親切に指摘されたソースのモックインターフェイスで、これらの行を見つけました
これは、すべての有効数字を考慮に入れる必要があることを示唆しており、基本的には長さが無制限であるため、入力されたものを出力します。
のソースを確認しましたcpp_dec_float_total_digits10
が、それが何であるかを正確に判断できません。ただし、それを定義しているように見えるこのコードセクションを見つけました。
の最初の引数として有効桁数を決定して使用できますboost::multiprecision::cpp_dec_float::str()
か?
c++ - boost::multiprecision::cpp_int から cpp_dec_float<0> (cpp_dec_float_50 などではなく) に変換する方法は?
Boost Multiprecision ライブラリのドキュメントで明らかにされているように、 a から aboost::multiprecision::cpp_int
への変換は簡単boost::multiprecision::cpp_dec_float
です。
acpp_int
から固定幅浮動小数点型 (つまり、 a ) に変換できるということは、 aからライブラリ内の任意幅cpp_dec_float_50
の浮動小数点型 (つまり、 a ) に変換できる可能性があるという 1 つの希望を与えてくれます。ただし、これは機能しません。次の簡単なサンプル プログラムが示すように、Visual Studio 2013 では変換が失敗します。cpp_int
cpp_dec_float<0>
期待どおり への変換に成功しますcpp_dec_float_50
が、前述のように、任意精度の浮動小数点型への変換を望んでいます: cpp_dec_float<0>
.
エラーは、ファイル内の内部 Boost Multiprecision コードからの次のコード スニペットに表示されます<boost/multiprecision/detail/default_ops.hpp>
。
エラーメッセージは次のとおりです。
エラー C2784: 'enable_if::result_type,detail::expression::result_type>,bool>::type boost::multiprecision::operator >(const boost::multiprecision::detail::expression &,const boost::multiprecision ::detail::expression &)': 'const boost::multiprecision::detail::expression &' のテンプレート引数を 'const next_type' から推測できませんでした
boost::multiprecision::cpp_int
aを aに変換することは可能でしょうかboost::multiprecision::cpp_dec_float<0>
(のように固定小数点精度の浮動小数点型に変換するのではなくcpp_dec_float_50
)?
(私のプログラムでは、浮動小数点数のインスタンスが常に 1 つだけインスタンス化され、頻繁に更新されないことに注意してください。そのため、この 1 つのインスタンスが大量のメモリを消費し、実際にサポートするのに長い時間がかかることは問題ありません。膨大な数。)
ありがとう!
c++ - 静的データ初期化子をインラインで使用する
cpp_dec_float
ソース ファイルで次のセクションを見つけました。
グローバル変数を宣言するのではなくzero
、one
、 、two
、などの値を使用したいと思います。half
const
これらの値をインラインで使用することは可能ですか? もしそうなら、どのように?
例:
c++ - std::vector が可能>(N).data() は安全に fftwq_complex* に再解釈_キャストされますか?
次の例が機能するとは思っていませんでしたが、実際には機能します (g++ 4.6.4、--std=c++0x を使用):
2 つの注意事項:
- 目標は、同じデータに対して
fftw
とblitz::Array
演算の両方をコピーする必要なく使用できるようにすると同時にsin()
、4 倍精度の複素変数のような汎用関数を使用できるようにすることです。 blitz
-part は正常に動作しますが、これは予想どおりです。しかし、(私にとって)驚いたことは、そのfftwq_complex*
部分もうまく機能することでした.- これは、正しい simd アライメントを保証するために使用さ
fftw::allocator
れる単純な置き換えですが、それはこの質問にとって重要ではないため、省略しました (少なくとも、これはこの質問にとって重要ではないと思います)。std::allocator
fftwq_malloc
私の質問は、私が踏んでいる氷はどれくらい薄いですか?
c++ - Boost.Multiprecision が可能な最大のワード サイズを使用しないのはなぜですか?
Boost.Multiprecion ライブラリの cpp_int バックエンドが 64 ビット アーキテクチャのワード (リム) として 32 ビットの符号なし整数を使用していることに気付きました。64 ビット ワードを使用するための要件は、コンパイラでネイティブの 128 ビット整数を使用できることです (これがヒントになる可能性があります)。何故ですか?
「手がかり」についての詳細。は、 file でネイティブの 128 ビット整数をサポートしていないコンパイラ用limb_type
として定義されています。というタイプもあります。detail::largest_unsigned_type<32>::type
boost/multiprecision/cpp_int/cpp_int_config.hpp
double_limb_type
fortran - mpfun90 のインストール方法は?
Fortran で多倍精度プログラムを作成しようとしています。私はすでに Fortran で倍精度プログラムを作成しています。誰でも多精度に変換するのを手伝ってくれますか? D. Baily multiprecision Library ( http://crd-legacy.lbl.gov/~dhbailey/mpdist/ for mpfun90) を見つけましたが、インストールできませんでした。Ubuntu に MPFUN90 をインストールするにはどうすればよいですか? 誰かがそれを手伝ってくれますか(段階的に)?gfortran コンパイラを使用しています。