フドウショウスウテン実数の表現方法のひとつ。float型やdouble型が採用している、実数値の格納方法。IEEE754という国際規格に則っている。以下、double型の浮動小数点について説明する。浮動小数点では、変数全体の64ビットの内、3つに分割して使用している。左のビットを0番目のビットとした場合、以下のように割り振られている。「符号」はその名の通りプラスかマイナスを格納する。0がプラス、1がマイナスを表す。「指数部」は「2の累乗」を格納する。「16.0」の場合、「2の4乗」のため「4」を示す値が格納される。「仮数部」は「有効な値」を格納する。指数部は「2の累乗」というおおざっぱな値のため、その間を埋める値として仮数部がある。実際の値は「指数部*仮数部」に符号を付けたものとなる。名称としての「浮動小数点」からは、10進数表記で「小数点が移動する」イメージがあるが、そのイメージは捨てた方がよい。「指数部」は「2の累乗」によって表現される。乗数は-1023~1023の値が使用できる。ここで、10進数の場合を考えてみる。10進数の場合、100は10の2乗、1000は10の3乗、0.1は10の-1乗、0.01は10の-2乗と表現できる。10進数の場合、10の累乗が「小数点の位置」を決めているということになる。これが、指数部の「2進数」にも当てはまる。指数部は2の累乗を表しており、これが2進数での「小数点の位置」を表している。指数部の値によって小数点が移動する、これが「浮動小数点」の由来である。浮動小数点は、基本的に「おおざっぱな値」であり、常に正確な値を表現しているとは限らない。これは、仮数部の性質による。仮数部は「指数部を割るための分数」である。「6.0」という値を表現する場合、指数部では「2の累乗」で表現できる「8」、仮数部は「指数部を割るための分数」として「3/4」、このふたつを掛けて「6」という値を表現する。このように、仮数部は「指数部を割るための分数」であり、その性質上、たとえば「6.1」という値を正確に表現することは不可能である。これを「丸め誤差」という。「誤差が許される近似値の計算」にのみ使用することが可能であり、計算機の元々の目的である「物理計算」や、正確な値よりも高速な演算が求められる3DCGなどでは使用してもよいが、通常の実数計算、特に貨幣計算には絶対に使用してはならない。BigDecimalクラスという「丸め誤差を生まない実数を格納するクラス」が存在するため、正確な値が必要な場合にはこちらを使用した方がいいだろう。浮動小数点で一番「普通」の値は「2.0」です。double型の場合、この値の各ビットは以下のようになります。マイナスの場合は0番目のビットが1になります。1ビット目~11ビット目は指数部、2の累乗が格納されます。指数のビットは、整数とほぼ同じです。2の1023乗の時に11111111111となります。残りのビットには仮数部が格納されます。仮数部は、左から0.5、0.25、0.125を意味します。この仮数部を足した値+1を指数部に掛けたものが結果になります。全てを表現することはできません。そのため、「4.1」なんていうごく普通の値すら正確には表現できません。この値は「4.1の近似値」であり、正確には「4.1」ではありません。8.2を計算すると、12.3になりません。このように、浮動小数点は「正確な値を表現する」目的には使用できません。BigDecimalクラスを使用するようにしましょう。double型変数をビット形式で出力します。double型変数をビット形式で文字列化します。間にスペースを入れます。浮動小数点で一番「普通」の値は「2.0」です。double型の場合、この値の各ビットは以下のようになります。マイナスの場合は0番目のビットが1になります。1ビット目~11ビット目は指数部、2の累乗が格納されます。指数のビットは、整数とほぼ同じです。2の1023乗の時に11111111111となります。残りのビットには仮数部が格納されます。仮数部は、左から0.5、0.25、0.125を意味します。この仮数部を足した値+1を指数部に掛けたものが結果になります。全てを表現することはできません。そのため、「4.1」なんていうごく普通の値すら正確には表現できません。この値は「4.1の近似値」であり、正確には「4.1」ではありません。8.2を計算すると、12.3になりません。このように、浮動小数点は「正確な値を表現する」目的には使用できません。BigDecimalクラスを使用するようにしましょう。double型変数をビット形式で出力します。double型変数をビット形式で文字列化します。間にスペースを入れます。し算usersupdate:2010/04/14このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。詳しくは「JavaA2Z」表紙の説明をご覧ください。