floating-point浮動小数点の使い方


備考

このセクションでは、浮動小数点の概要と、開発者が浮動小数点を使用する理由について概説します。

また、浮動小数点数の大きな科目についても言及し、関連するトピックにリンクする必要があります。浮動小数点のドキュメンテーションは新しいので、これらの関連トピックの初期バージョンを作成する必要があります。

概要

浮動小数点とは何ですか?

数字には2種類あります:

  • 基点の前後に特定の桁数がある固定小数点。
  • 浮動小数点。仮数部および指数部の特定の桁数が利用可能です。

小数点の前に小数点以下3桁、小数点以下2桁の小数点を使用する例:

  • 0は000.00として表される
  • 0.123は000.12として表される
  • 0.00123は000.00として表される
  • 1は001.00
  • 1.123は001.12と表される
  • 1.00123は001.00と表される
  • 123.456は123.45として表される
  • 1234.56は234.56として保存されるため、エラーです

仮数部の小数点以下5桁と指数部の小数点以下1桁を使用する例:

  • 0は、.00000 x 10 ^ 0として表すことができる
  • 0.1は、10000×10 ^ 0
  • 0.0000123456は.12345×10 ^ -4
  • 0.000000000123456は.12345×10 ^ -9
  • 指数が数値を格納するのに十分でないため、0.00000000001はエラーです
  • 1は、10000×10 ^ 1
  • 1.123は、.11230×10 ^ 1
  • 1.00123は.10012 x 10 ^ 1
  • 123.45678は、.12345 x 10 ^ 2として表すことができます
  • 123456789.1は.12345 x 10 ^ 9として表すことができます
  • 指数が数値を格納するのに十分でないため、1000000000はエラーです

したがって、浮動小数点数は、同じ大きさの相対精度で非常に異なる大きさ(0.000000000123456と123456789.1)の数値を表すことができます。

固定小数点数は、数値の大きさ(たとえば金額)に関係なく、常に小数点以下の桁数が必要な場合に便利です。浮動小数点数は、大きさが変化し、精度が依然として必要な場合に便利です。例えば、道路工学者の距離はメートルで測定され、メートルの.01は重要ではありませんが、マイクロチップの設計者は0.0000001メートルと.000000001メートルの差が巨大です。物理学者は膨大な数と非常に同じ計算の小さな数字さまざまな大きさの精度が、浮動小数点数を有用なものにしています。

使い方

コンピュータでは10進数を使用しません。バイナリを使用するため、浮動小数点で問題が発生します。なぜなら、10進数のすべてが浮動小数点数で正確に表現できるわけではなく、計算に丸め誤差を導入するからです。

すべての例を10進数で書いたことで、浮動小数点数を小数点以下の合計として格納するのではなく、バイナリであることに注意することが重要です。

123.875 = 1/10^-2 + 2/10^-1 + 3/10^0 + 8/10^1 + 7/10^2 + 5/10^3
 

コンピュータは浮動小数点数を2進数の合計として格納します。

123.875 = 1/2^-6 + 1/2^-5 + 1/2^-4 + 1/2^-3 + 1/2^-1 + 1/2^0 + 1/2^1 + 1/2^2 + 1/2^3
 

これらの分数を表すビットパターンを保存するには、いろいろな方法がありますが、ほとんどのコンピュータが現在使用しているものはIEEE-754標準に基づいています。これには、10進表現と2進表現の両方を格納するための規則と、異なるサイズのデータ​​型のための規則があります。

IEEE標準を使用して通常の数値を格納する方法は次のとおりです。

  • MSBに格納された符号の1ビット、1は負を意味し、0は正を意味する
  • 指数のビット - 正負両方の指数を得るためにバイアスを引く
  • 少数点の後の仮数のためのいくつかのビット - 小数点の前に暗黙の1を持つ。

より緩やかなアンダーフローを可能にするために、非正規化数(指数ビットがすべてゼロの場合)が特別に扱われます。指数は-126に設定され、小数点前の暗黙の先頭1は仮数に加算されません。

32ビットIEEE-754浮動小数点数

通常の32ビットIEEE-754浮動小数点数の場合:

  • ビット32は記号
  • ビット24〜31は指数です - バイアスは127です
  • ビット1-23は仮数

したがって、通常の数は次のように計算されます。

-1^sign * 2^(exponent-bias) * 1.mantissa
 

ビットパターンが次の場合:

0 10000101 11101111100000000000000
 

値は次のとおりです。

-1^0 * 2^(133-127) * 1.111011111
-1^0 *     2^6     * (1 + 1/2 + 1/4 + 1/8 + 1/32 + 1/64 + 1/128 + 1/256 + 1/512)
   1 *      64     * 991/512
         123.875
 

特別な値がいくつかあります:

0 11111111 11111111111111111111111 = NaN
0 11111111 00000000000000000000000 = +infinity
1 11111111 00000000000000000000000 = -infinity
0 00000000 00000000000000000000000 = +Zero
1 00000000 00000000000000000000000 = -Zero
 

32ビットIEEE-754形式の詳細は、次の場所にあります。