演習 - 浮動小数点型

この演習では、浮動小数点データを使用して、各データ型の微妙な違いについて学習します。

浮動小数点は、小数部分の値を表す単純な値の型です。 整数とは異なり、指定された浮動小数点型に格納できる最大値と最小値以外にも考慮事項があります。

浮動小数点型の評価

まず、それぞれで許可される有効桁数についても考慮する必要があります。 有効桁数は、小数点の後に格納できる値の数です。

次に、値の格納方法と、値の精度に対する影響を考慮する必要があります。 つまり、decimal が 10 進数 (基数 10) 形式で格納されるのに対し、float および double の値は、バイナリ (基数 2) 形式で内部的に格納されます。 なぜこれが重要なのでしょうか。

バイナリ浮動小数点値に対して算術演算を実行すると、10 進数 (基数 10) 演算に慣れている場合には、生成される結果に驚くかもしれません。 多くの場合、バイナリ浮動小数点演算は実際の値の近似値です。 したがって、floatdouble は、小さいメモリ占有領域を使用して大量の数値を格納できるため便利ですが、近似が有効な場合にのみ使用してください。 たとえば、ビデオ ゲームで武器の爆発域を計算する場合は、千分のいくつかで十分です。

より正確な回答が必要な場合は、decimal を使用する必要があります。 decimal 型の値にはそれぞれ比較的大きなメモリ占有領域がありますが、算術演算を実行すると、より正確な結果が得られます。 そのため、財務データを使用する場合や計算で正確な結果が必要な場合には、decimal を使用する必要があります。

ステップ 1 - .NET エディターで前の演習のコードを削除またはコメント アウトする

前の演習のコードを選択し、Backspace キーまたは del キーを選択します。 必要に応じて、.NET エディター内で前のコードをコメント アウトします。

ステップ 2 - 各符号付き整数型に対して MinValue プロパティと MaxValue プロパティを使用する

各種データ型の値の範囲を表示するには、.NET エディターに次のコードを入力します。

Console.WriteLine("");
Console.WriteLine("Floating point types:");
Console.WriteLine($"float  : {float.MinValue} to {float.MaxValue} (with ~6-9 digits of precision)");
Console.WriteLine($"double : {double.MinValue} to {double.MaxValue} (with ~15-17 digits of precision)");
Console.WriteLine($"decimal: {decimal.MinValue} to {decimal.MaxValue} (with 28-29 digits of precision)");

ステップ 3 - コードを実行して、各データ型の値の範囲を検査する

このコードを実行すると、次の出力が表示されます。

Floating point types:
float  : -3.402823E+38 to 3.402823E+38 (with ~6-9 digits of precision)
double : -1.79769313486232E+308 to 1.79769313486232E+308 (with ~15-17 digits of precision)
decimal: -79228162514264337593543950335 to 79228162514264337593543950335 (with 28-29 digits of precision)

ご覧のように、float および doubledecimal とは異なる表記法を使用して、可能な最大値と最小値を表します。 しかし、この表記は何を意味するのでしょうか。

大きな浮動小数点値の解読

浮動小数点型は多くの有効桁数がある大きな数値を保持できるため、"指数表記" を使用して値を表すことができます。指数表記は、"の 10 乗" を表す科学的表記法です。 したがって、5E+2 のような値は、5 * 10^2 (5 * 10 * 10) と同等であるため、値 500 になります。

まとめ

  • 浮動小数点型は、小数部分の数を保持できる単純な値データ型です。
  • アプリケーションに適切な浮動小数点型を選択するには、保持できる最大値と最小値の他にも考慮すべきことがあります。 小数点の後に保持できる値の数、数値の格納方法、および内部ストレージが算術演算の結果に与える影響についても考慮する必要があります。
  • 浮動小数点値は、数値や指数が特に大きくなる場合に "指数表記" を使用して表すことができます。
  • コンパイラとランタイムで decimal を処理する方法は、float または double と比べて根本的な違いがあります。算術演算でどの程度の精度が必要かを判断する場合は特にそうです。