浮動小数点計算機

10進数を IEEE 754 のバイナリ表現に変換し、精度を解析します。

任意の10進数を入力し、精度形式を選ぶと、IEEE 754 のバイナリ表現、指数、仮数、丸め誤差を確認できます。

浮動小数点計算機
10進数を IEEE 754 のバイナリ表現に変換し、精度を解析します。

下のボタンをクリックすると、よく知られた数値定数を読み込めます。

10進入力精度と注記意味
3.141592653589793(倍精度)符号: 0 · 指数: 1 · 正確な桁数: 約15π — 無理数で、わずかな丸め誤差を含んで格納される
0.1(単精度)符号: 0 · 格納値: 0.100000001490116 · 誤差: 約1.49e-9典型的な丸め誤差の例
2.718281828459045(倍精度)符号: 0 · 指数: 1 · 正確な桁数: 約15オイラー数 e
1.23e-10(単精度)符号: 0 · 正規化済み · 小さな正の値単精度での小さい数の精度を確認

浮動小数点計算機について

浮動小数点計算機は、10進数を IEEE 754 のバイナリ浮動小数点表現に変換し、符号ビット、指数、仮数を含む完全なビットレベルの内訳を表示します。浮動小数点表現を理解することは、コンピュータ科学者、ソフトウェアエンジニア、数値解析者、そして計算精度が重要になる場面でコンピュータを扱うすべての人にとって基本となる知識です。 IEEE 754 規格は 1985 年に電気電子学会によって制定され、2008 年に改訂されました。C、C++、Java、Python、JavaScript を含む、事実上すべての現代的なプロセッサと言語で使われる浮動小数点演算の形式を定義しています。規格が定める主な形式は、単精度(32ビット)と倍精度(64ビット)の 2 つです。 32ビットの単精度浮動小数点数は、1 ビットの符号ビット、8 ビットの指数、23 ビットの仮数(有効数)で構成されます。符号ビットは 0 なら正数、1 なら負数です。指数はバイアス 127 を加えて格納されるため、実際の指数は格納値から 127 を引いた値になります。これにより、符号なし整数で正負の指数を表現できます。仮数には正規化された有効数の小数部が格納され、先頭の 1 は暗黙的に存在する「隠れたビット」として扱われるため、実効的に 1 ビット多い精度が得られます。 64ビットの倍精度浮動小数点数は、1 ビットの符号ビット、11 ビットの指数(バイアス 1023)、52 ビットの仮数を使い、単精度の 6〜7 桁に対して、およそ 15〜17 桁の有効十進桁を提供します。倍精度は多くのプログラミング言語で既定の浮動小数点型です。 重要なのは、0.1 のような一見単純な10進数でも、2進浮動小数点では正確に表現できないことです。10進数の 0.1 は 2進数では 0.0001100110011... という無限循環小数になり、23 ビットや 52 ビットの仮数に収めるためには打ち切る必要があります。この打ち切りによってわずかな丸め誤差が生じるため、多くのプログラミング言語で 0.1 + 0.2 が厳密に 0.3 にならないのです。この計算機は、入力した任意の10進数について、実際に格納される値と丸め誤差を示すので、数値計算に関わる人にとって非常に役立つデバッグ・学習ツールです。

使い方

  1. 精度形式を選びます。単精度(32ビット)は組み込みや GPU、倍精度(64ビット)は科学計算に向いています。
  2. 入力欄に任意の10進数を入力します。科学表記(例: 1.23e-10 や 6.022e23)にも対応しています。
  3. 「変換」をクリックすると、符号ビット、指数ビット(バイアス値と実際の値を含む)、仮数ビットを含む IEEE 754 の全体像が表示されます。
  4. 格納値(コンピュータが実際に使う正確な10進数)を確認し、入力値と比べて丸め誤差を見てください。
  5. 例ボタンを使って、π、e、0.1 のような有名な定数が 2 進浮動小数点でどう表されるかを確認できます。

よくある質問

なぜ 0.1 は浮動小数点で正確に表せないのですか?
10進数の 0.1 は、2進数では 1/3 のように無限に繰り返す小数(0.000110011001100...)です。float は固定長のビット数しか持たないため、この小数は打ち切られ、わずかな丸め誤差が生じます。そのため、多くの言語では 0.1 + 0.2 が厳密な 0.3 ではなく、約 0.30000000000000004 になります。
指数欄のバイアスとは何ですか?
バイアスは、格納する前に実際の指数へ加える固定オフセットです。単精度では 127、倍精度では 1023 を使います。実際の指数が 3 なら、単精度での格納値は 3 + 127 = 130 になります。このバイアス表現により、符号なし整数だけで −126〜+127(単精度)または −1022〜+1023(倍精度)の指数を表せます。
隠れたビットとは何ですか?
正規化された浮動小数点数では、仮数の先頭ビットは常に 1 ですが、実際には格納されません。これは暗黙の「隠れた」または「暗黙の」ビットです。これにより、単精度は 24 ビット分の仮数精度(格納 23 ビット + 隠れた 1 ビット)、倍精度は 53 ビット分(格納 52 ビット + 隠れた 1 ビット)を持ちます。ゼロ付近の非正規化数では、暗黙の先頭ビットは 0 になります。
IEEE 754 の特殊値には何がありますか?
IEEE 754 にはいくつかの特殊値があります。正のゼロと負のゼロ(符号ビットで区別)、正の無限大と負の無限大(指数ビットがすべて 1、仮数ビットがすべて 0)、そして NaN(Not a Number、指数ビットがすべて 1 で、少なくとも 1 つの仮数ビットが 1)です。これらにより、オーバーフロー、ゼロ除算、未定義操作をプログラムを落とさずに扱えます。
単精度と倍精度はいつ使い分けるべきですか?
科学計算、金融計算、7 桁を超える十進精度が必要な用途では倍精度(64ビット)を使ってください。メモリや性能が制約になる場合は単精度(32ビット)を使います。GPU は単精度 float をはるかに高速に処理でき、モバイルや組み込みシステムでも効率のため 32ビットが好まれることが多いです。単精度の丸め誤差は、反復アルゴリズムで大きく蓄積することがあります。
コードで浮動小数点の精度誤差を避けるには?
等価比較では、厳密一致ではなく許容誤差(epsilon)を使ってください。a === b ではなく |a − b| < 1e-9 のように比較します。金融計算では、整数演算(たとえば金額をセントで保持する)や専用の10進ライブラリを検討してください。科学計算では、Kahan の和算法のような補償和アルゴリズムを使うと、大きな総和での累積丸め誤差を減らせます。