非正規化数
出典: フリー百科事典『ウィキペディア(Wikipedia)』
情報工学において、非正規化数(ひせいきかすう、Denormal Number/Denormalized Number)は、浮動小数点数での0の周辺のギャップを埋める数である。英語の場合、最近では Subnormal Number とも呼ぶ。非正規化数は最小の正規化数(正常に表せる浮動小数点数)よりも小さい(つまりゼロに近い)。
例えば、最も小さい正の正規化数が、1×β-n(βが浮動小数点数の基数。通常2または10)であるとき、これより小さい表現可能な正の数は全て非正規化数である。計算結果が非常に小さい値の場合、それを使った計算によって徐々に精度が失われるため、非正規化数が生まれることを「漸近的アンダーフロー(gradual underflow)」とも呼ぶ。
IEEE浮動小数点標準 (IEEE 754) の実装で非正規化数は、指数が最小の正規化数と同じで「暗黙の整数ビット」が0の値として符号化するため、これを表す特別な指数部(バイアスされた値が0、最小の指数より1小さい)が用意されている。提案中のIEEE 754rでは、非正規化数(denormal number)は subnormal number と改名され、二進だけでなく十進の形式も規定されている。十進では暗黙の整数ビットが存在せず、非正規化数も特別な符号化をすることなく表現できる。
[編集] 背景
IEEE 754標準が作成されている間に、非正規化数はIntel 8087で実装された。この実装が非正規化数が実際に使えることを証明した。FPUの実装によっては非正規化数をハードウェアで直接サポートしておらず、ソフトウェアで実現している。これはユーザーからも見える形になっていて、非正規化数を使った計算は正規化数による同じ計算よりも性能が悪くなる。