1. ホーム
  2. c#

[解決済み】10進数の代わりにdoubleを使うべき時は?

2022-03-31 18:42:19

質問

を使用することの利点を3つ挙げることができます。 double (または float の代わりに decimal :

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

しかし、これらの利点は、モデリング・ソフトウェアに見られるような計算を多用する操作にのみ適用されるようです。もちろん、金融計算のように精度が要求される場合には、2倍算は使うべきではありません。では double (または float の代わりに decimal ということでしょうか?

追記編集しました。 たくさんの素晴らしい回答ありがとうございました!勉強になりました。

さらにもう一つ質問です。何人かの人が、2倍はより正確に実数を表すことができるという指摘をしています。また、実数をより正確に表現できるという指摘もありました。しかし、浮動小数点演算を行うと精度が落ちる(時には著しく)というのは本当でしょうか?

どのように解決するのですか?

メリットはよくまとまっていると思います。しかし、一点だけ抜けていることがあります。それは decimal タイプは、より正確に表現することができます。 10進数 の数値(例:通貨や金融の計算で使用される数値)です。一般に double 型は、任意の実数に対して、少なくとも同等の精度(間違っていたら誰か訂正してください)と、間違いなくより高い速度を提供することになります。結論としては、どちらを使うか考えるときには、常に double が必要な場合を除き base 10 の精度を高めることができます。 decimal を提供します。

編集する

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

  1. ある種の数字(特に小数)は浮動小数点形式では真に表現できないこと。
  2. 手で計算するのと同じように、丸め誤差が発生します。しかし、これらの誤差が熟考に値するほど重大かどうかは、文脈(実行している操作の数)に大きく依存します。

どのような場合でも、理論的には等価であるはずの(しかし異なる計算で得られた)2つの浮動小数点数を比較する場合、ある程度の公差を許容する必要があります(どの程度かは様々ですが、通常非常に小さいです)。

精度の誤差が生じる特定のケースについてのより詳細な概要については、「精度」のセクションを参照してください。 ウィキペディアの記事 . 最後に、浮動小数点数/演算について機械レベルで深く(数学的に)議論したい場合は、よく引用される記事である コンピュータ科学者が浮動小数点演算について知っておくべきこと .