問題タブ [fixed-point]
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.
floating-point - パックされた整数 (16.16) 固定小数点を浮動小数点数に変換する方法は?
「32 ビットの符号付き固定小数点数 (16.16)」を float に変換する方法は?
大丈夫(fixed >> 16) + (fixed & 0xffff) / 65536.0
ですか?-2.5はどうですか?そして-0.5?
それともfixed / 65536.0
正しい方法ですか?
(PS: とにかく、符号付き固定小数点「-0.5」はメモリ内でどのように見えますか?)
python - Python 計算エラー
API mpmath を使用して、次の合計を計算しています
によって定義されるセリエ u0、u1、u2 を考えてみましょう。
セリエは 2 に収束しますが、丸めの問題で 2000 に収束するようです。
私のコード:
私の悪い結果:
他の関数 (fdiv など) で実行しようとしたり、精度を変更しようとしました: 同じ悪い結果
このコードの何が問題になっていますか?
質問: コードを変更して値 2.0 を見つけるにはどうすればよいですか ??? 式で:
un+1 = 2003 - 6002/un + 4000/un un-1
ありがとう
c++ - 小さい値の固定小数点平方根を改善する方法
Dobb博士の記事「固定小数点演算による数学集約型アプリケーションの最適化」で説明されているAnthonyWilliamsの固定小数点ライブラリを使用して、 RhumbLineメソッドを使用して2つの地理的ポイント間の距離を計算しています。
これは、ポイント間の距離が大きい場合(数キロメートルを超える場合)は十分に機能しますが、距離が短い場合は非常に不十分です。最悪の場合、2つのポイントが等しいかほぼ等しい場合、結果は194メートルの距離になりますが、1メートル以上の距離では少なくとも1メートルの精度が必要です。
倍精度浮動小数点の実装と比較して、fixed::sqrt()
関数の問題を特定しました。この関数は、小さな値ではパフォーマンスが低下します。
の結果を修正することfixed::sqrt(0)
は、それを特殊なケースとして扱うことで簡単ですが、誤差が194メートルから始まり、距離が長くなるにつれてゼロに向かって収束する、ゼロ以外の小さな距離の問題は解決されません。おそらく、ゼロに向けて精度を少なくとも1桁改善する必要があります。
アルゴリズムは上記fixed::sqrt()
のリンク先の記事の4ページで簡単に説明されていますが、改善できるかどうかは言うまでもなく、それに従うのに苦労しています。関数のコードを以下に示します。
m_nVal
は内部固定小数点表現値であり、でint64_t
あり、表現はQ36.28形式(fixed_resolution_shift
= 28)を使用することに注意してください。表現自体は、少なくとも小数点以下8桁まで十分な精度があり、赤道弧の一部は約0.14メートルの距離に適しているため、制限は固定点表現ではありません。
ラムライン法の使用は、このアプリケーションの標準化団体の推奨事項であるため、変更できません。いずれの場合も、アプリケーションの他の場所または将来のアプリケーションで、より正確な平方根関数が必要になる可能性があります。
質問:fixed::sqrt()
有界で決定論的な収束を維持しながら、ゼロ以外の小さな値のアルゴリズムの精度を向上させることは可能ですか?
追加情報 上記の表を生成するために使用されるテストコード:
結論ジャスティン・ピールの解決策と分析、および「固定小数点演算の無視された芸術」の アルゴリズムとの比較に照らして、私は後者を次のように適応させました。
これによりはるかに高い精度が得られますが、必要な改善は達成されません。Q36.28形式だけでも、必要な精度が得られますが、数ビットの精度を失うことなくsqrt()を実行することはできません。ただし、いくつかの水平思考はより良い解決策を提供します。私のアプリケーションは、計算された距離をある距離制限に対してテストします。後から考えると、かなり明白な解決策は、距離の2乗を限界の2乗に対してテストすることです。
c++ - 指数に使用されるビット数
float/double を固定小数点に変換して元に戻す関数をいくつか書いています。float または double の指数部分に使用されるビット数を決定する最良の方法を知っている人はいますか? std::numeric_limits から何かを使用したいと思っていましたが、運がありませんでした。
指数部は C++ 標準で定義されていますか、それともコンパイラ/マシン固有ですか? または、実行時に変更できますか?
floating-point - 固定変換への素敵でシンプルなフローティング?
フローティングを 0.32 固定に変換する簡単な方法を探していました。役立つリンクや論文はありますか?
matlab - Matlab の Mex ファイルの違い
Matlab Coder を使用して、matlab プロジェクトから Mex ファイル (.mexw64) を作成しました。問題は、mex ファイルを実行したときの出力が、プロジェクトを通常の方法で実行したときと同じではないことです。多くの場合、数値の変動は非常に小さいです。
5.4463.. -> 5.4465.. など
固定小数点計算に関連する問題があるのではないかと考えています。何を探すべきですか?
c - 固定小数点fx表記と変換
fx1.15表記があります。基になる整数値は63183(レジスタ値)です。
現在、ウィキペディアによると、完全な長さは15ビットです。値が中に収まりませんよね?
それで、それがfx1.16値であると仮定すると、それを人間が読める値に変換するにはどうすればよいですか?
matlab - Matlab の固定点
誰かがこれを説明できますか?
私が理解しているように、それは精度が低くなります..それを使用して得たいのはスピードアップですか? いつ使うのがいい?Matlab Coder で使用する必要がありますか?
floating-point - 浮動小数点表現と固定小数点表現の長所と短所
私はこの 3 日間、浮動小数点表現と固定小数点表現の正確な違いを理解しようと努めてきました。資料を読んで混乱しており、何が正しくて何が間違っているのか判断できません。
問題の 1 つは、「精度」、「仮数」、「非正規化」、「アンダーフロー」などのいくつかの技術用語の意味にあります。
誰でも例を挙げて違いを教えてもらえますか?
私が今までに発見できた(そして明確に理解できた)ポイントは次のとおりです。
浮動小数点 -
1.利点 非常に大きな範囲を提供します
2.欠点大きい数値を 丸めます
固定小数点 -
1.利点数値は正確に表されます (「お金」が関係する場合に使用されます)
2.欠点非常に限られた範囲を提供します
しかし、もっと多くの違いがあることは知っています (主に長所と短所)。誰でも説明付きでそれらをリストできますか?
c++ - 整数クラス ラッパーのパフォーマンス
固定小数点数用に既存のライブラリを改造しようとしています。現在、ライブラリは 32 ビットの符号付き整数で動作する名前空間関数です。私はこれを好転させ、整数をラップする固定小数点クラスを作成したいと考えていますが、パフォーマンスはユースケースの問題であるため、クラスに関連するパフォーマンスのペナルティをこのような細かいものに支払いたくありません。
将来のクラスには非常に単純なデータ要件があり、リソースがないため、クラスを「値指向」にして、非変更操作を活用し、妥当な場合はインスタンスを値で渡すことが可能であると考えました。これは、実装された場合、階層の一部ではなく単純なクラスになります。
生の整数を使用する場合と比較して、実際のパフォーマンスの低下が発生しないように、整数ラッパー クラスを作成できるかどうか疑問に思っています。私はこれが事実であるとほぼ確信していますが、コンパイルプロセスについて十分に知っているわけではありません。
stl イテレータは単純なポインタ操作にコンパイルされ、整数操作でのみ同様のことをしたいと言っていることを私は知っています。
いずれにせよ、ライブラリはプロジェクトの一部として c++11 に更新されるので、少なくとも constexpr と右辺値参照などの他の新機能を使用して、このクラスのパフォーマンスを純粋な整数のパフォーマンスに近づけることができることを願っています。オペレーション。
さらに、2 つの実装間のパフォーマンスの違いをベンチマークするための推奨事項をいただければ幸いです。