23

激しい数値計算のために、浮動小数点の代わりに固定小数点を使用することを検討しています。もちろん、固定小数点タイプのサイズが何バイトであるか、どのCPUで実行されるか、(Intelの場合)MMXやSSE、またはその他の新しいものを使用できるかどうかは重要です...

浮動小数点がこれまでになく速く実行される最近では、固定小数点を検討する価値があるのではないかと思います。数パーセント以上重要であると言える一般的な経験則はありますか?35,000フィートの数値パフォーマンスの概要は何ですか?(ところで、DSPや特殊な組み込みシステムではなく、ほとんどのコンピューターに見られる一般的なCPUを想定しています。)

4

7 に答える 7

19

それはまだ価値があります。浮動小数点は以前よりも高速ですが、固定小数点も高速です。また、IEEE 754で保証されている精度を超える精度を気にする場合は、修正が唯一の方法です。

于 2008-10-05T02:55:34.323 に答える
17

非常に大量のデータを処理している状況では、固定小数点はメモリ効率が 2 倍になることがあります。たとえば、8 バイトの double に対して 4 バイトの長さの整数です。大規模な地理空間データセットでよく使用される手法は、最上位ビットを破棄し、残りを固定小数点整数で処理できるように、すべてのデータを共通の原点に削減することです。浮動小数点数は、実際に浮動小数点数である場合にのみ重要です。つまり、非常に広い範囲の数値を非常に高い精度で扱っている場合です。

于 2008-10-07T12:37:08.860 に答える
11

固定小数を使用するもう1つの理由は、丸めがはるかに単純で予測可能であるということです。ほとんどの金融ソフトウェアは、お金を表すために半偶数四捨五入を伴う固定小数点の任意精度の小数を使用します。

于 2008-10-05T08:18:42.203 に答える
5

固定小数点を使用する方がほぼ常に高速です (x86、ペンティアム、68k、および ARM の経験)。ただし、アプリケーションの種類によっても異なります。グラフィックス プログラミング (固定小数点の主な用途の 1 つ) では、事前に作成されたコサイン テーブル、ログ テーブルなどを使用してコードを最適化できました。また、基本的な数学演算も高速であることが証明されています。

金融ソフトウェアに関するコメント。以前の回答で、固定小数点は財務計算に役立つと言われました。私自身の経験 (大規模な財務管理システムの開発とクレジット カード処理の豊富な経験) では、固定小数点は使用しません。浮動小数点または固定小数点を使用すると、丸め誤差が発生します。金額を表すには常に全額を使用し、可能な最小額 (ユーロまたはドルの場合は 1c) を数えます。これにより、部分的な金額が失われることはありません。複雑な計算を行う場合、値が double に変換され、アプリケーション固有の丸めルールが適用され、結果が整数に変換されます。

于 2008-10-05T12:38:18.110 に答える
4

ハードウェアが浮動小数点をサポートしていない場合、またはハードウェアの実装がうまくいかない場合は、固定小数点を使用してください。

クラスを作成するときも注意してください。プロファイリングに関して言えば、クラスの不要なコピーが原因で、簡単だと思っていたことが実際には犬になってしまう可能性があります。ただし、それはまた別の質問です。

于 2008-10-05T08:40:21.083 に答える
1

固定小数点を使用するもう 1 つの理由ARMは、携帯電話やタブレットなどのデバイスに FPU (少なくともその多く) がないことです。

リアルタイム アプリケーションを開発する場合、固定小数点演算を使用して関数を最適化することは理にかなっています。グラフィックスにとって非常に重要なFFT(高速フーリエ変換)の実装があり、浮動小数点演算に依存する効率に基づいて改善されています。

于 2012-05-28T11:07:48.557 に答える
-1

汎用CPUを使用しているため、アプリケーションにとってパフォーマンスが非常に重要であり、すべてのティックをカウントする必要がある場合を除いて、固定小数点を使用しないことをお勧めします。固定小数点を実装する手間や、オーバーフローなどの問題に対処することは、CPUを使用している場合、それだけの価値はありません。

IMHO、固定小数点は、浮動小数点演算のハードウェアサポートなしでDSPを使用している場合にのみ必要です。

于 2008-10-05T03:10:43.980 に答える