|
浮動小数点数(ふどうしょうすうてんすう)は、コンピュータにおける実数の近似値の表現方式。 固定小数点数と比較するとさまざまな誤差が発生しやすいが、大きな値や、逆に小さな値を表現するのに向いている。そのため、誤差の概念がはっきりしている分野や極端な数を扱う分野(科学計算など)で多く用いられている。また、プログラミング言語のほとんどが対応しているということもあり、小数の表現方法としては最も普及している。 固定小数点数の演算と比べると演算速度が遅いため、FPU(浮動小数点数プロセッサ)と呼ばれる、浮動小数点数の演算を高速化するための専用の装置が別途搭載(現在はCPUに内蔵)されている場合が多い。
浮動小数点数の構造値の表現方法は、たとえば国際単位系(SI)で、キロは103、センチは10-2と表現するのに似ている。 ただし、浮動小数点数では次の3つのデータで数値を表現する。
浮動小数点数では、数値の絶対値は(仮数部)×(基数)(指数部)となる。たとえば、0.5を、基数が10の浮動小数点数で表すと0.05×101(0.05e+1)、基数が2だった場合は0.25×21となる。 仮数部に割り当てられたビット数をnとすると、2進数での有効桁数はn+1となる。これは、最上位の桁は必ず1になり、表現する必要がないためである。なお、0を表す場合は符号部、仮数部、指数部のすべてのビットを0にする。 浮動小数点数の表現方法浮動小数点数の表現方法はいくつかの種類がある。
それぞれ32ビット表現(単精度)と64ビット表現(倍精度)とがある。 IEEE方式(IEEE 754 形式)IEEE 754 形式の単精度実数では、符号部1ビット・指数部8ビット・仮数部23ビット、倍精度では符号部1ビット・指数部11ビット・仮数部52ビットで表現されている。各部は次のように定義されている。
つまり、IEEE 754 形式で表現する値は
である。 ただし、IEEE 754 形式の指数部は複雑で、以下のような役割も持つ。
※0を0で割ろうとするとNaNになる。また、 IEEE 754 で表現するまでの過程2.5を 単精度 IEEE 754 で表現するには、次のようになる。 2.5×2⁰ 仮数部は1以下でなければならないため、値をシフトし正規化する。基数は2、コンピュータの内部表現は2進数であるため、シフト量は1ビットである。さらに、シフトして このままでは 1.25×2¹ となり1未満ではないが、仮数部は 仮数 - 1 と決められているため、次のようになる。 0.25×2¹ 指数部は127をバイアスすることが決まっているため 0.25×2128 実際には2進数で表現されているので、2進数に直す。
浮動小数点は 符号部 指数部 仮数部 の順で並べるため 2進値:0 10000000 01000000000000000000000、16進値:40200000 IBM方式(エクセス64 形式)エクセス64の単精度実数では、符号部1ビット、指数部7ビット、仮数部24ビットで表現されている。各部は次のように定義されている。
符号部は値の符号を表す。 指数部は-1663~-16-64と16-64~1663の範囲が表現できる。これを下回ればアンダーフロー、上回ればオーバーフローとなる。 エクセス64で表現するまでの過程1.5を単精度のエクセス64で表現するには、次のようになる。 1.5×16⁰ 仮数部は1以下でなければならないため、値をシフトする。ただし、基数が16で、コンピュータの内部表現は2進数であるため、シフト量は4ビットである(2⁴=16)。加えて正規化し、その結果は次の通り。 0.09375×16¹ 次に指数部をエクセス64で表現する。ただし、負の指数を表すために64をバイアスしなければならない。バイアスを行うと、0~127を表現できる指数が、-64~+63を表現できる指数になる(-64 + 64 = 0、63 + 64 = 127)。 よって、今回の例では以下のようになる。 0.09375×1665 実際には2進数で表現されているので、2進数に直す。
浮動小数点数の並び順は 符号部 指数部 仮数部 であるため、 2進値:0 1000001 000110000000000000000000、16進値:41180000 浮動小数点数の精度浮動小数点数は、表現の仕方から、固定小数点数と比べると誤差が生じやすい。浮動小数点数では次のような誤差が生じることがある。
関連項目外部リンク |
This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.
Mercedes Car
This site monitored by SitePinger.net