質問

激しい数値演算のために、浮動小数点の代わりに固定小数点の使用を検討しています。もちろん、固定小数点型のサイズが何バイトなのか、どのCPUで実行されるのか、MMXまたはSSEを(Intelの場合)使用できるのか、または何か新しいものが出てくるのかは関係ありません...

浮動小数点がこれまで以上に高速になっている今日、固定小数点を考慮する価値はあるのでしょうか?数パーセント以上問題になると言える一般的な経験則はありますか? 35,000フィートの数値パフォーマンスの概要は何ですか? (ちなみに、DSPや専用の組み込みシステムではなく、ほとんどのコンピューターに見られる一般的なCPUを想定しています。)

役に立ちましたか?

解決

まだ価値があります。浮動小数点は従来より高速ですが、固定小数点も高速です。 IEEE 754で保証されている精度を超える精度が必要な場合は、依然として解決方法が唯一の方法です。

他のヒント

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

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

固定小数点(x86、pentium、68k、およびARMの使用)を使用すると、ほぼ常に高速になります。ただし、アプリケーションの種類にも依存します。グラフィックプログラミング(固定小数点の主な用途の1つ)では、事前に作成されたコサインテーブル、ログテーブルなどを使用してコードを最適化することができました。

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

ハードウェアが浮動小数点をサポートしていない場合、またはハードウェアの実装が不十分な場合は、固定小数点を使用します。

クラスを作成する際にも注意してください。クラスの(不要な)コピーのために、プロファイリングに関しては、あなたが迅速だと思うものが実際に犬であることが判明する可能性があります。しかし、それはまた別の質問です。

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

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top