浮動小数点数:それは何ですか? 例で簡単に説明
この実用的なヒントでは、浮動小数点数とは何か、そしてそれが固定小数点数とどのように異なるかを示します。
浮動小数点数:それは何ですか?
コンピュータサイエンスでは、浮動小数点数は特定の精度で動作するはずのデバイスの測定によく使用されます。
- 浮動小数点数(または「浮動小数点数」)は、指数表記を使用した数値の表現です。 例外的なケースでは、これはおおよそ機能します。 番号1230000を番号1.23⋅10⁶で表すこともできます。
- 1.23は「Mantissa」と呼ばれます。 10は「ベース」で、6は「指数」です。 ちなみに、仮数に記号を追加することもできます。 ただし、デュアルシステムにすべてを適用することもできます。 番号10101100を番号1.0101100⋅2⁷で表すこともできます。 コンピューターは、符号、仮数、指数のみを保存します。
- 通常、コンピューターは、コンマの前に1が来るまでコンマを前後に移動します。 その後、PCは仮数と指数の小数点以下の桁を保存するだけです。
- 指数を正の数として保存できるように、固定数、いわゆるバイアスが追加されます。 小数点の前の可能な最小の指数(-バイアス)は0として保存されます。
- 固定小数点数とは対照的に、カンマは浮動小数点数の固定小数点ではありません。
Half、Float&Double-浮動小数点数の一般的なコーディング
特にArduinoを使用してプログラミングする場合は、これら3つの用語に出くわしました。 これらは標準化された表現です。
- データ型「half」は16ビットの数値です。 左端のビットが符号を担当します。 指数は5ビット、仮数は10です。使用されるバイアスは15です。 仮数の最初のビットは(ほぼ)常に1なので、これは保存されません。
- 「float」(または「single」)データ型は32ビットの数値です。 ここでも、記号にビットが使用されます。 ただし、指数には8ビット(バイアス= 127)と仮数23があります。
- データ型「double」も符号にビットを使用します。 ただし、ここでは、指数には11ビット(バイアス= 1023)があり、仮数には52ビットもあります。 合計で、これは64ビット、つまり8バイトです。
- これらの3つの一般的なデータ型に加えて、さらに多くのデータ型があります。 ただし、half、float、doubleの精度はすでに十分であるため、これらはほとんど使用されません。
10進数を浮動小数点数に変換する-仕組み
最後に、通常の10進数を浮動小数点数に変換する方法を示します。
- この例では、10進数の18.4を使用します。 小数点の前の数値は、最初にデュアルシステムに転送されます。 その結果、(10010)²が得られます。
- 次に、0.4を変換する必要があります。 最初に0.4に2を掛けます。結果として0.8になります。 コンマの前の番号を書き留めます。 この場合は0です。次に0.8に2を掛けます。今回は結果として1.6になります。 1を書き留めて、0.6で計算を続けます。 しばらくすると、パターンが繰り返されることがわかります(この例では)。 最後に、すべての数字を上から下に書き留めます:011001100110 ...
- 次に、数字を一緒に追加します。 また、(⋅2⁰)を追加して、10010.01100110 ...⋅2⁰を取得します。 次に、小数点の前に1が来るまでコンマを移動し、適切に累乗を変更します。 その結果、小数点を4桁左に移動したため、1.001001100110 ...⋅2⁴が得られます。 このステップは「正規化」とも呼ばれます。
- この例では、データ型「float」を使用します。 したがって、適切なバイアス値を指数に追加します。 また、計算結果4 + 127 = 131を2進数に変換する必要があります。 番号131は、デュアルシステムの番号10000011です。
- これで、完成した浮動小数点数を書き留めることができます。 最初にサイン用のビットを書きます。 正の数なので、最初のビットは0です。その後、131を書き込む必要があります。 この場合、この数には8ビットが必要であり、8ビットは浮動小数点数に使用できるため、全体がこの場合に完全に適合します。 最後に、仮数部にはフロートに使用できる23ビットがあるため、仮数部の最初の23ビットを書き留める必要があります。
- したがって、完成した浮動小数点数は01000001100100110011001100110011の数字である必要があります。 もう少しわかりやすいのは、数字の0 | 10000011 | 00100110011001100110011です。
浮動小数点数を10進数に変換する-方法は次のとおりです
最後に、浮動小数点数を再び10進数に変換する方法を示します。 このために、番号10000011001001100110011001100110011を取ります。
- 16、32、または64ビットの数値が得られるまで、最初に数値(前)をゼロで埋めます。 この場合、それは01000001100100110011001100110011です。
- 最初の数字は記号を表します。 したがって、私たちの数は正です。
- 次に、次の(この場合)8桁を書き、バイアスを減算します。 (10000011)₂= 131→131-127 = 4→したがって、後ろに「⋅2⁴」があります。
- ここで、「1」、残りのすべての数字、および「⋅2⁴」を書きます:1.00100110011001100110011⋅2⋅
- 次に、カンマを4桁右に移動して、「⋅2⁴」を省略できるようにします:10010.0110011001100110011
- 次に、通常どおり10010を整数に変換します。 18。
- 次に、小数点以下の桁を変換する必要があります。 コンマの後の最初の数字の値は1:2¹、2番目の数字1:2²などです。 値を追加し、カンマの前にある数字から18.3999996185302734375の数字が得られます。
次の実用的なヒントでは、ASCII文字を2進数に変換する方法を示します。