数値・ビット演算・単位

浮動小数点変換短い表示の先にある値へ

10進数を入力して格納値と比較するか、完全な16進・2進ビット列を読み解きます。

浮動小数点変換

入力

入力はこのブラウザー内で処理され、サーバーには送信されません。

10進数は小数点とe/E指数に対応。16進数は8桁/16桁、2進数は32桁/64桁が必要です。ビット列には0x/0b接頭辞と空白・タブを使えます。

結果

10進表示・有効数字9桁/17桁

0.100000001

正規化数

符号ビット · 1ビット

0

格納指数 · 8ビット

01111011

仮数部・符号なし整数 · 23ビット

10011001100110011001101
精度
32ビット・binary32
入力の表現
10進数値
16進ワード
0x3DCCCCCD
2進ワード
00111101110011001100110011001101
符号ビット
0
格納指数
123
実効指数
-4
仮数部・符号なし整数
5033165
暗黙の先頭ビット
1
正確な値の式
13421773 × 2^-27
変換結果の性質
最近接・偶数丸め
正確な格納値・10進展開
0.100000001490116119384765625
符号付き誤差・格納値−入力値
0.000000001490116119384765625

オプション

選んだ精度に直接丸めます。最近接、ちょうど中間なら偶数側を選択。精度や表現の変更は現在の文字列を再解釈します。上限1024文字、明示的な10進指数は−4096〜4096。

解析が完了しました。

浮動小数点変換では、画面に表示される小数と実際に格納された値を分けて確認できます。デバッガーで0.1と表示されても、内部の値が正確な十分の一とは限りません。完全な10進展開を開くと、その違いを数字で追えます。

IEEE754変換と16進数変換を同じ画面で扱えます。単精度・倍精度の違いを調べるときは、同じ10進入力のまま精度だけを切り替えてください。レジスターの内容を読む場合は、まず元のデータが32ビットか64ビットかを確かめます。

浮動小数点変換で確認できる違い

二つの精度で同じ目標を比較

浮動小数点変換は、入力された正確な10進数をそれぞれの精度へ直接丸めます。0.1の単精度格納値は0.100000001490116119384765625です。倍精度では誤差が小さくなりますが、ゼロにはなりません。誤差の符号で目標のどちら側に着地したかを確認できます。

同じ目標位置を粗い数値グリッドと細かいグリッドに投影し、それぞれの最近接点を輪で示す図。

NaNのビット列を失わない

7FC00001と7FC00002はどちらもquiet NaNですが、ペイロードは1と2です。元のワードから読み取るため、符号とquietビットもそのまま残ります。単にNaNと表示するだけでは分からない差を、障害解析の記録に残せます。

ペイロードの印が異なる二つのNaNパターンが、それぞれ同じ印を保って出力される図。

表現と精度を取り違えないために

01

まず入力の意味を決める

初期値は10進数0.1、精度はbinary32です。16進入力への切り替えは文字列の変換ではなく読み方の変更です。ワードを貼り付ける際は最上位ビットが左になるよう並べ、桁数も精度に合わせます。

02

短い小数表示だけで判断しない

短い表示は32ビットなら有効数字9桁、64ビットなら17桁です。正確な値は別欄で全桁確認できます。誤差は格納値から入力値を引いた値なので、負なら格納値のほうが小さいことを意味します。

03

サンプルの置き換えを確認する

サンプルを開くと負のゼロやNaNを含む五つの候補をプレビューできます。適用後は入力と結果を一緒に戻せます。自動変換は350ミリ秒待機し、オフなら解析ボタンまたはCtrl/Cmd + Enterで更新します。

ビットから格納値を読み解く

三つのフィールドと先頭ビット

単精度は1/8/23ビット、倍精度は1/11/52ビットに分割します。格納指数と実効指数を別々に表示し、仮数の暗黙の先頭ビットも確認できます。全ゼロ指数の非正規化数では先頭が0になり、通常の1とは異なります。

中間値の直前と直後を区別

10進文字列を正確な有理数として読み、目標形式へ一度だけ丸めます。単精度の中間値1.000000059604644775390625をほんの少し超えた入力も、先にdoubleへ変換して差を失うことなく、次の単精度値を選びます。

検証に使える完全なワード

2進と16進の出力は元の全ビットを保持します。レポートには入力、精度、各フィールド、完全な10進値と丸め誤差を含められます。信号NaNもビットとして保存されるため、異なる処理系での読み取り結果と照合できます。

受け付ける形式と丸めの境界

対象はbinary32とbinary64
丸め方式は最近接・偶数丸めに固定しています。ちょうど中間なら、保持する有効数の最下位ビットが偶数側の値を選びます。半精度、bfloat16、拡張精度や別の丸めモードは扱いません。
不足ビットを勝手に補わない
16進数は8桁または16桁、2進数は32桁または64桁が必要です。一致する接頭辞とASCIIの空白・タブだけを許可します。桁の不足、超過、下線などはエラーにし、ゼロ埋め、切り捨て、バイトの交換は行いません。
小さな値と誤差の扱い
有限の入力が大きすぎる場合は符号付き無限大、小さすぎる場合は非正規化数や符号付きゼロへ丸められます。誤差を計算するのは有限の10進入力と有限の結果の間だけです。ビット列入力や特殊値には比較対象の小数がないため、誤差を付けません。
quietビットをペイロードと分離
仮数部の最上位ビットが1ならquietという一般的な約束で判定します。ペイロードにそのビットは含めません。文字列NaNはペイロード0の標準quiet NaNになります。他のパターンはビット列で指定し、旧アーキテクチャーや例外動作の再現は対象外です。
一つの値だけを厳密に読む
入力は1024文字まで、明示的な10進指数は−4096〜4096です。小数点はピリオドを使い、式、改行、桁区切りは受け付けません。ファイル、URL、一括入力、バイト順変換、ビット切り替えボタン、隣接値の探索、ULP距離、相対誤差も提供しません。

浮動小数点変換のよくある質問

0.1を正確に保存できない理由は?

有限の2進小数は分母が2の累乗で表せます。十分の一には因数5が必要なので、2進展開は循環します。格納できる有効数の長さで丸められた結果を、完全な10進展開で確かめてください。短い0.1という表示だけでは違いが見えません。

32ビットと64ビットでは何が変わる?

32ビットは符号1、指数8、仮数23ビットで、正規化数では暗黙の1を加えて24ビットの精度です。64ビットは1、11、52で、精度は53ビットです。倍精度は値の間隔が細かく範囲も広がりますが、0.1を正確に表せるわけではありません。

符号・指数・仮数はどう解釈する?

正規化数では符号が正負を決め、格納指数から127または1023を引き、仮数に暗黙の1を付けます。指数が全ゼロなら先頭ビットは0で、全1なら無限大かNaNです。本ページでは特殊値に正規化数の式を誤って当てはめません。

16進のビット列から10進値を復元できる?

できます。16進入力と対応する精度を選んで完全なワードを貼り付けます。例えばbinary32の3F800000は正確に1です。整数としての16進値を数値変換するのではなく、同じビットを浮動小数点として解釈します。

非正規化数はどんな値?

格納指数が0で仮数部が0以外の値です。実効指数は単精度で−126、倍精度で−1022となり、先頭ビットは0です。最小の正規化数より小さな値をゼロへ近づけて表すための仕組みです。

想定と違う結果ですか?

別の値を確かめる

浮動小数点変換で境界付近の小数や取得済みのワードを確認しましょう。入力を一つずつ変更し、最新の結果が出てから検証用レポートを保存できます。