[解決済み】10進数の代わりにdoubleを使うべき時は?
質問
を使用することの利点を3つ挙げることができます。
double
(または
float
の代わりに
decimal
:
- 使用するメモリが少ない。
- 浮動小数点演算がプロセッサでネイティブにサポートされているため、より高速に処理できる。
- より広い範囲の数値を表現することができる。
しかし、これらの利点は、モデリング・ソフトウェアに見られるような計算を多用する操作にのみ適用されるようです。もちろん、金融計算のように精度が要求される場合には、2倍算は使うべきではありません。では
double
(または
float
の代わりに
decimal
ということでしょうか?
追記編集しました。 たくさんの素晴らしい回答ありがとうございました!勉強になりました。
さらにもう一つ質問です。何人かの人が、2倍はより正確に実数を表すことができるという指摘をしています。また、実数をより正確に表現できるという指摘もありました。しかし、浮動小数点演算を行うと精度が落ちる(時には著しく)というのは本当でしょうか?
どのように解決するのですか?
メリットはよくまとまっていると思います。しかし、一点だけ抜けていることがあります。それは
decimal
タイプは、より正確に表現することができます。
10進数
の数値(例:通貨や金融の計算で使用される数値)です。一般に
double
型は、任意の実数に対して、少なくとも同等の精度(間違っていたら誰か訂正してください)と、間違いなくより高い速度を提供することになります。結論としては、どちらを使うか考えるときには、常に
double
が必要な場合を除き
base 10
の精度を高めることができます。
decimal
を提供します。
編集する
追加のご質問である、演算後の浮動小数点数の精度の低下については、少し微妙な問題です。確かに、演算を行うたびに精度(ここでは正確さと同じ意味で使っています)は確実に低下します。これには2つの理由があります。
- ある種の数字(特に小数)は浮動小数点形式では真に表現できないこと。
- 手で計算するのと同じように、丸め誤差が発生します。しかし、これらの誤差が熟考に値するほど重大かどうかは、文脈(実行している操作の数)に大きく依存します。
どのような場合でも、理論的には等価であるはずの(しかし異なる計算で得られた)2つの浮動小数点数を比較する場合、ある程度の公差を許容する必要があります(どの程度かは様々ですが、通常非常に小さいです)。
精度の誤差が生じる特定のケースについてのより詳細な概要については、「精度」のセクションを参照してください。 ウィキペディアの記事 . 最後に、浮動小数点数/演算について機械レベルで深く(数学的に)議論したい場合は、よく引用される記事である コンピュータ科学者が浮動小数点演算について知っておくべきこと .
関連
-
[解決済み】C#はJavaのcharAt()と同等?)
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み】取り消せないメンバはメソッドのように使えない?
-
[解決済み】値をNULLにすることはできません。パラメータ名:source
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み] usingディレクティブはネームスペースの内側と外側のどちらを使うべきですか?
-
[解決済み] Javaで数値を小数点以下n桁に丸める方法
-
[解決済み] 通貨を表すのにDoubleやFloatを使ってはいけないのですか?
-
[解決済み] 10進数のrange()ステップ値を使用するには?
-
[解決済み] C#でDecimalをDoubleに変換する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] DBNullから他の型にオブジェクトをキャストすることができない
-
[解決済み】ORA-01008: すべての変数がバインドされていません。これらはバインドされています。
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み】ファイルへの読み書きの際に共有違反のIOExceptionが発生する C#
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み] decimal vs double! - いつ、どちらを使うべき?重複
-
[解決済み] C#で浮動小数点演算は整合性が取れているのか?可能なのか?