10進数の代わりに倍精度数を使うべきなのはいつですか? 質問する

10進数の代わりに倍精度数を使うべきなのはいつですか? 質問する

の代わりにdouble(または)を使用することの利点は 3 つあります。floatdecimal

  1. メモリの使用量が少なくなります。
  2. 浮動小数点演算がプロセッサによってネイティブにサポートされているため、高速です。
  3. より広い範囲の数値を表すことができます。

しかし、これらの利点は、モデリング ソフトウェアで見られるような計算集約型の操作にのみ適用されるようです。もちろん、財務計算など、精度が求められる場合には double を使用しないでください。では、 「通常の」アプリケーションでの代わりにdouble(または) を選択する実用的な理由はあるのでしょうか。floatdecimal

追記: 素晴らしい回答をありがとうございました。勉強になりました。

さらにもう 1 つ質問があります。数人の人が、double は実数をもっと正確に表せると指摘しました。宣言されている場合、通常は double の方が実数をもっと正確に表せると思います。しかし、浮動小数点演算を実行すると精度が (場合によっては大幅に) 低下する可能性があるというのは本当でしょうか。

ベストアンサー1

利点をうまくまとめたと思います。しかし、1つ見逃している点があります。decimalタイプは、10進数の数値(通貨や財務計算で使用される数値など)を表現する場合にだけより正確です。一般的に、double型は、任意の実数に対して少なくとも同等の精度(間違っていたら誰か訂正してください)と確実に高速化を提供します。簡単な結論は、どちらを使用するかを検討するときは、 が提供する精度doubleが必要でない限り、常に を使用するということです。base 10decimal

編集:

演算後の浮動小数点数の精度の低下に関する追加の質問については、これは少し微妙な問題です。確かに、精度 (ここでは精度と正確さを同じ意味で使用しています) は、各演算の実行後に着実に低下します。これには 2 つの理由があります。

  1. 特定の数値(最も明らかなのは小数)は浮動小数点形式では正確に表現できないという事実
  2. 手作業で計算した場合と同様に、丸め誤差が発生します。ただし、これらの誤差が十分に考慮する価値があるかどうかは、状況 (実行している演算の数) に大きく依存します。

いずれの場合も、理論上は同等であるはずの (しかし異なる計算を使用して得られた) 2 つの浮動小数点数を比較する場合は、ある程度の許容範囲 (許容範囲は異なりますが、通常は非常に小さい) を許容する必要があります。

精度に誤差が生じる可能性がある特定のケースの詳細な概要については、ウィキペディアの記事最後に、マシンレベルでの浮動小数点数/演算について真剣に(そして数学的に)詳しく知りたい場合は、よく引用される記事を読んでみてください。浮動小数点演算についてコンピュータ科学者が知っておくべきこと

おすすめ記事