SlideShare uma empresa Scribd logo
1 de 10
非正規化数の
FZ(FTZ)とDAZの違い
@ksmakoto(きしもと)
おさらい浮動小数点方式( 1/3)
● Knuth先生によればバビロニアには、
ある種の浮動小数点形式があった
(TAoCP§4.1)
● 一般的に、全て固定長の
 符号(sign)
 指数部(exponent)
 小数部(fraction) から成る(用語は揺れ有)
● 1970s以前は混沌、現在はIEEE754
● URR([Hamada1987] 適応的可変長)
おさらい浮動小数点方式( 2/3)
● 端から、NaN ・ ± ∞ ・ 一般的な数 ・
「非正規(化)数」・ ゼロ(・ マイナスゼロ)
● 一般的な場合の例
例: 1.602177e-19
 符号(sign):    +
 指数部(exponent): 10^(-19)
 小数部(fraction): 1.602177
おさらい浮動小数点方式( 3/3)
● 具体的に(IEEE754 binary64)
NaN : 0 11111111111 ......(全 0 以外)
∞ : 0 11111111111 000000......
DBL_MAX: 0 11111111110 111111......
1 : 0 01111111111 000000......(ケチ表現)
DBL_MIN: 0 00000000001 000000......
、(以下 非正規化数)
の最大 : 0 00000000000 111111.....( ケチ非 表現)
の最小 : 0 00000000000 000.......001
 0: 0 00000000000 000.......000
と非正規化数
gradual underflow
● アンダーフローとは
● 正規化数で表現できないくらい
絶対値が小さくなった
and・or厳密には非ゼロだがゼロになった
● そこで、可能ならゼロにせず非正規化数に
→ gradual underflow
●
ハードでの は だから いことも実装 大変 無
ソフトではもっと くなるから いことも遅 無
●
と のトレードオフだから、精度 速度
びたい こともある「選 」
SSEとgradual underflow
● 詳細はインテルの資料を参照
● SSE(およびIA-64)には速度重視のための
Flush-to-Zero (FZ (FTZ)) モードがある
● コード例はあとでアップロードします
FZとDAZ
● SSE2かSSE3以降には(資料とコードで違う)
Denormals-Are-Zero (DAZ) というモードもある
● どう違うのか
 → 次の図を見れば一発でわかります
FZとDAZ
FZ DAZ
x y x y
op op
出力で0に
入力で0に
x `op` y x `op` y
FZとDAZ
● コード例はあとでアップロードします
FZとDAZ
● コード例はあとでアップロードします

FZ and DAZ in denormals