IEEE 754 (アイトリプルイーななごおよん、アイトリプルイーななひゃくごじゅうよん)は、別の表記では「IEEE Standard for Floating-Point Arithmetic」と書かれるものであり、1985年 にIEEE によって定められた、浮動小数点算術 に関する標準規格 である。
G N U c o r e u t i l s の マ ニ ュ ア ル で ﹁ A l m o s t a l l m o d e r n s y s t e m s u s e I E E E - 7 5 4 f l o a t i n g p o i n t ﹂ と 書 か れ て い る [ 1 ] よ う に 、 ほ ぼ 全 て の モ ダ ン な シ ス テ ム が 使 っ て い る 浮 動 小 数 点 方 式 ︵ の 仕 様 ︶ で あ る 。 プ ロ セ ッ サ 、 F P U な ど の ハ ー ド ウ ェ ア 、 浮 動 小 数 点 演 算 ラ イ ブ ラ リ な ど の ソ フ ト ウ ェ ア で 採 用 さ れ て い る 。
な お 、 多 く の プ ロ グ ラ ミ ン グ 言 語 や そ の 処 理 系 の 仕 様 書 で は 、 I E E E 7 5 4 に 準 拠 し た 処 理 と は わ ざ わ ざ 明 記 し て い な い こ と が 多 い 。 [ 注 釈 1 ] つ ま り 実 機 で I E E E 7 5 4 準 拠 と 明 記 し て い な く て も 実 際 に は I E E E 7 5 4 準 拠 し て い る も の は 多 い 。 他 方 、 あ ま り 多 く は な い が 、 J a v a や C # の よ う に 、 言 語 仕 様 で ﹁ I E E E 7 5 4 ﹂ の 名 を 明 記 し て い る も の も あ る ︵ た だ し そ の よ う な 仕 様 を 厳 密 に 実 装 す る の は そ う 簡 単 で は な い 場 合 も あ る [ 2 ] ︶ 。
改 定 版
改 定 版 と し て は 、 2 0 0 8 年 8 月 に 制 定 さ れ た I E E E 7 5 4 - 2 0 0 8 が あ る 。 こ れ に は 、 1 9 8 5 年 の I E E E 7 5 4 制 定 当 初 の 規 格 で あ る I E E E 7 5 4 - 1 9 8 5 ︵ 英 語 版 ︶ 、 な ら び に 基 数 非 依 存 の 浮 動 小 数 点 演 算 の 標 準 規 格 I E E E 8 5 4 - 1 9 8 7 ︵ 英 語 版 ︶ の 両 者 が ほ ぼ す べ て 吸 収 さ れ て い る 。 I E E E 7 5 4 - 2 0 0 8 は 、 正 式 に 制 定 さ れ る ま で は 、 I E E E 7 5 4 r と 呼 ば れ た 。
正 式 な 規 格 名 は 、 I E E E S t a n d a r d f o r F l o a t i n g - P o i n t A r i t h m e t i c ( A N S I / I E E E S t d 7 5 4 - 2 0 0 8 ) で あ る 。 I S O / I E E E の P S D O ︵ パ ー ト ナ ー 標 準 化 機 関 ︶ 合 意 文 書 に 基 づ き 、 J T C 1 / S C 2 5 を 通 し て 国 際 規 格 I S O / I E C / I E E E 6 0 5 5 9 : 2 0 1 1 と し て 採 用 さ れ [ 3 ] 、 公 表 さ れ て い る [ 4 ] 。
定 義 内 容
こ の 標 準 規 格 は 、 以 下 の よ う な こ と を 定 義 し て い る 。
● 基 本 形 式 : 次 の 交 換 形 式 と は 独 立 し て 抽 象 的 な 形 で 表 現 法 を 定 め た も の 。 二 進 の 他 に 十 進 形 式 も あ る 。 通 常 の ﹁ 浮 動 小 数 点 方 式 に よ る 数 ﹂ の 他 、 0 、 負 の 0 、 非 正 規 化 数 、 正 の 無 限 と 負 の 無 限 ︵ 拡 大 実 数 ︶ [ 5 ] 、 0 . 0 / 0 . 0 の 結 果 の よ う な ﹁ 数 で は な い ﹂ 状 態 を 表 現 す る N a N 、 に つ い て の 表 現 が あ る 。
● 交 換 形 式 : ビ ッ ト 列 と し て の 表 現 形 式 で あ り 、 フ ァ イ ル や 通 信 な ど に よ る 交 換 の 際 に 機 種 に 依 存 し な い 表 現 形 式 と し て 定 め た も の 。
● 丸 め と そ の 規 則 : 端 数 処 理 の 仕 方 に 関 す る 種 類 と 規 定 。
● 非 正 規 化 数 に 関 す る 取 り 決 め
● 例 外 的 な 処 理 : 例 外 的 状 態 の 扱 い ︵ ゼ ロ 除 算 、 オ ー バ ー フ ロ ー 、 な ど ︶ 。
● 四 則 演 算 : 四 則 演 算 は 、 両 辺 の 値 が 正 確 に そ の 値 で あ る も の と し て 数 学 的 に 正 確 に 計 算 さ れ た 値 か ら 、 ﹁ 指 定 さ れ た 丸 め ﹂ に よ っ て 丸 め ら れ な け れ ば な ら な い [ 6 ] 。
● そ の 他 の 演 算 : そ の 他 の 関 数 で は 、 四 則 演 算 と 同 様 の 正 確 さ を 実 現 す る こ と は 難 し い 場 合 が あ る [ 7 ] 。
ま た こ の 規 格 で は 、 高 度 な 例 外 処 理 、 追 加 的 な 演 算 ︵ 三 角 関 数 な ど ︶ 、 式 評 価 、 再 現 可 能 性 な ど を 強 く 推 奨 し て い る 。
I E E E 7 5 4 - 1 9 8 5 か ら I E E E 7 5 4 - 2 0 0 8 へ の 改 訂 作 業 に は 、 7 年 間 か か っ た 。 改 訂 作 業 は D a n Z u r a s が 指 揮 し 、 M i k e C o w l i s h a w が 編 集 責 任 者 と な っ た 。 I E E E 7 5 4 - 1 9 8 5 に あ っ た 二 進 形 式 ︵ 単 精 度 ・ 倍 精 度 ︶ は 、 そ の ま ま I E E E 7 5 4 - 2 0 0 8 に も 含 ま れ て い る 。 さ ら に 、 I E E E 7 5 4 - 2 0 0 8 で は 、 新 た に 二 進 形 式 1 つ 、 十 進 形 式 2 つ が 加 わ り 、 計 5 つ の 基 本 形 式 が 存 在 す る 。 I E E E 7 5 4 - 2 0 0 8 に ﹁ 従 っ て い る ﹂ と 主 張 す る 実 装 は 、 こ れ ら の う ち 少 な く と も 1 つ の 基 本 形 式 を 算 術 演 算 と 情 報 交 換 の た め に 実 装 し な け れ ば な ら な い 、 と さ れ て い る 。
I E E E 7 5 4 に お い て 、 浮 動 小 数 点 数 デ ー タ を 取 り 扱 う た め の 符 号 化 が 形 式 ( F o r m a t s ) と し て 定 め ら れ て い る 。 そ の 中 で は 次 の デ ー タ を 表 現 で き る 。
● 2 ま た は 10 を 基 数 と す る 有 限 数 。 各 有 限 数 は 、 符 号 s ︵ 0 ま た は 1 ︶ 、 仮 数 c 、 指 数 q の 3 つ の 整 数 で 表 現 し 、 ( − 1 ) s × c × b q と い う 値 を 意 味 す る 。 b は 基 数 で 2 ま た は 10 で あ る 。 例 え ば 、 符 号 が 1 ︵ 負 数 を 意 味 す る ︶ 、 仮 数 が 1 2 3 4 5 、 指 数 が − 3 で 、 基 数 が 10 だ っ た 場 合 、 − 1 2 . 3 4 5 と い う 値 を 表 す 。
● 非 正 規 数
● 0 ︵ + 0 と − 0 ︶
● + ∞ と − ∞ 。
● 2 種 類 の 非 数 ( N a N ) 。 N a N に は ク ワ イ エ ッ ト N a N ( Q u i e t N a N ) と シ グ ナ リ ン グ N a N ( S i g n a l i n g N a N ) が 存 在 す る 。 ど ち ら の N a N で も 、 追 加 情 報 を 伝 え ら れ る 余 分 の ビ ッ ト が 設 け ら れ て い る 。
所 定 の 形 式 で 表 現 可 能 な 有 限 数 値 は 、 基 数 ( b ) 、 仮 数 の 桁 数 す な わ ち 精 度 ( p ) 、 指 数 に 関 す る パ ラ メ ー タ e m a x に よ っ て 決 定 さ れ る 。
● c は 0 か ら b p − 1 ま で の 値 で な け れ ば な ら な い ︵ 例 え ば b = 1 0 か つ p = 7 な ら ば c は 0 か ら 9 9 9 9 9 9 9 の 範 囲 を 取 る ︶ 。
● q は 1 − e m a x ≤ q + p − 1 ≤ e m a x で な け れ ば な ら な い ︵ 同 様 に 、 例 え ば p = 7 か つ e m a x = 9 6 な ら ば q は − 1 0 1 か ら 90 の 範 囲 を 取 る ︶ 。
括 弧 内 の 例 の パ ラ メ ー タ を 用 い た 場 合 、 0 以 外 で 最 も 小 さ い 値 は 1 × 1 0 − 1 0 1 と 表 現 さ れ 、 最 も 大 き い 値 は 9 9 9 9 9 9 9 × 1 0 90 ( ま た は 9 . 9 9 9 9 9 9 × 1 0 96 ) と 表 現 さ れ る 。 こ の う ち 、 仮 数 の 桁 数 が 充 分 確 保 さ れ て い る の は 1 0 0 0 0 0 0 × 1 0 − 1 0 1 ︵ ま た は 1 . 0 0 0 0 0 0 × 1 0 − 9 5 ) 以 上 の 値 で あ り 、 こ れ ら の 数 は 正 規 数 と 呼 ば れ る 。 一 方 、 正 負 の 最 も 0 に 近 い 正 規 数 で あ る − 1 × 1 0 − 9 5 と 1 × 1 0 − 9 5 に 挟 ま れ た 区 間 は 、 非 正 規 数 と し て 表 現 さ れ る 。 例 え ば 、 1 × 1 0 − 1 0 1 は こ の 例 に お い て 表 現 で き る 最 も 0 に 近 い 正 の 値 だ が 、 仮 数 の 桁 数 が 1 し か な く 非 正 規 数 で あ る 。
ゼ ロ は 仮 数 が 0 の 有 限 数 で あ る 。 符 号 が 別 に 定 義 さ れ て い る の で 、 符 号 付 の 2 種 類 の ゼ ロ + 0 と − 0 が 存 在 す る 。
I E E E 7 5 4 標 準 で は 、 5 種 類 の 基 本 形 式 を 定 め て お り 、 基 数 や 符 号 化 し て 使 用 す る ビ ッ ト 数 に 応 じ て 名 前 が 付 け ら れ て い る 。 そ の 内 訳 は 、 3 2 / 6 4 / 1 2 8 ビ ッ ト で 表 現 す る 3 種 類 の 二 進 浮 動 小 数 点 形 式 と 6 4 / 1 2 8 ビ ッ ト で 表 現 す る 2 種 類 の 十 進 浮 動 小 数 点 形 式 か ら な る 。 こ の う ち 、 二 進 形 式 の 初 め の 2 種 は I E E E 7 5 4 - 1 9 8 5 で 単 精 度 ( s i n g l e ) ・ 倍 精 度 ( d o u b l e ) と 呼 ば れ た 形 式 で あ る 。 3 つ 目 の 二 進 形 式 は 、 四 倍 精 度 ( q u a d ) と も 呼 ば れ る 。 同 様 に 、 十 進 形 式 の 2 種 も 倍 精 度 ・ 四 倍 精 度 と 呼 ば れ る 。
基 本 二 進 形 式 の 典 型 的 な 精 度 は 実 際 に 仮 数 部 に 保 持 さ れ て い る ビ ッ ト 数 よ り も 1 ビ ッ ト 分 だ け 高 い 。 こ れ は 二 進 形 式 の 正 規 化 さ れ た 浮 動 小 数 点 数 で は 最 上 位 ビ ッ ト ︵ 桁 ︶ が 常 に 1 で あ る こ と を 利 用 し て 符 号 化 の 際 に そ れ を 省 い て 表 現 し て い る か ら で あ る ︵ ケ チ 表 現 ︶ 。
形式名
一般名
基数 (b)
桁・ビット数 (p)
指数最小値 (emin)
指数最大値 (emax)
備考
十進換算 桁数
十進換算 emax
binary16
半精度
2
10+1
−14
+15
交換形式であって、基本形式ではない
3.31
4.51
binary32
単精度
2
23+1
−126
+127
7.22
38.23
binary64
倍精度
2
52+1
−1022
+1023
15.95
307.95
binary128
四倍精度
2
112+1
−16382
+16383
34.02
4931.77
decimal32
十進単精度
10
7
−95
+96
交換形式であって、基本形式ではない
7
96
decimal64
十進倍精度
10
16
−383
+384
16
384
decimal128
十進四倍精度
10
34
−6143
+6144
34
6144
十進換算の桁数は p × log10 b で得られる十進での桁数の近似値である。
十進換算の emax は emax × log10 b で得られる十進での指数最大値である。
算 術 そ の 他 の 演 算 で 使 用 さ れ る 形 式 は 、 符 号 化 し た と き の も の と 一 致 し て い な く て も 構 わ な い ︵ つ ま り 、 実 装 は 、 内 部 で 異 な る 表 現 を 使 用 し て も よ い ︶ 。
こ の 標 準 で は 、 精 度 ︵ 有 効 桁 数 ︶ を 拡 張 し た 形 式 を 示 し 、 基 本 形 式 よ り も 精 度 を 高 く す る こ と を 推 奨 し て い る [ 8 ] 。 拡 張 精 度 ( e x t e n d e d p r e c i s i o n ) 形 式 は 、 仮 数 部 と 指 数 部 の 桁 数 ︵ ビ ッ ト 数 ︶ を 基 本 形 式 よ り も 大 き く し た も の で あ る 。 拡 張 可 能 精 度 ( e x t e n d a b l e p r e c i s i o n ) 形 式 で は 、 ユ ー ザ ー が 仮 数 部 の 桁 数 と 指 数 部 の 範 囲 を 指 定 で き る 。 こ れ ら を 内 部 の 表 現 と し て 実 装 す る こ と が で き る 。 た だ し 、 そ の よ う な 内 部 形 式 も 、 有 限 数 の 表 現 で き る 集 合 が 定 め ら れ る よ う パ ラ メ ー タ ( b , p , e m a x ) は き ち ん と 定 義 さ れ て い る 必 要 が あ る 。
ま た 、 こ の 標 準 は 拡 張 ︵ 可 能 ︶ 精 度 形 式 の 実 装 を 要 求 し て は い な い 。
こ の 標 準 で は 、 言 語 が サ ポ ー ト し て い る そ れ ぞ れ の 基 数 b に つ い て p と e m a x を 指 定 す る 方 法 を 提 供 す る こ と を 推 奨 し て い る [ 9 ] 。
ま た 、 拡 張 形 式 を サ ポ ー ト す る 場 合 は 、 サ ポ ー ト し て い る そ れ ぞ れ の 基 数 b に つ い て 最 大 の 基 本 形 式 よ り も 高 い 精 度 を サ ポ ー ト す る こ と を 推 奨 し て い る [ 10 ] 。
2 つ の 基 本 形 式 の 中 間 の 精 度 の 拡 張 形 式 の 場 合 、 大 き い 方 の 基 本 形 式 と 同 じ か そ れ 以 上 の 指 数 範 囲 を 持 た な け れ ば な ら な い 。 し た が っ て 例 え ば 64 ビ ッ ト の 拡 張 精 度 二 進 形 式 な ら 、 e m a x は 1 6 3 8 3 以 上 で な け れ ば な ら な い 。 I n t e l 8 0 8 7 の 80 ビ ッ ト 拡 張 形 式 は こ の 要 求 を 満 た し て い る ︵ b i n a r y 1 2 8 と 指 数 の 範 囲 が 等 し い ︶ 。
交 換 形 式 は 固 定 長 の ビ ッ ト 列 で の 浮 動 小 数 点 数 の 交 換 や 記 録 を 意 図 し た 形 式 で あ る 。
二 進 浮 動 小 数 点 数 用 に 、 1 6 / 3 2 / 6 4 ビ ッ ト に く わ え て 32 の 倍 数 で 1 2 8 ビ ッ ト 以 上 の 交 換 形 式 が 定 義 さ れ て い る 。 16 ビ ッ ト 形 式 ︵ 半 精 度 ︶ は 、 グ ラ フ ィ ッ ク 用 途 な ど 小 さ な 値 の 交 換 ま た は 記 憶 に 用 い る こ と が 想 定 さ れ て い る 。
二 進 交 換 形 式 の 符 号 化 方 式 は I E E E 7 5 4 - 1 9 8 5 と 同 じ で あ る 。 先 頭 に 符 号 ビ ッ ト 1 ビ ッ ト が あ り 、 そ れ に w ビ ッ ト の ﹁ バ イ ア ス ﹂ さ れ た 指 数 部 が 続 き 、 さ ら に p − 1 ビ ッ ト の 仮 数 部 が 続 く 。 全 体 で k ビ ッ ト の 形 式 の 場 合 、 指 数 部 の ビ ッ ト 数 は w = f l o o r ( 4 l o g 2 ( k ) ) − 1 3 で 得 ら れ る 。 た だ し 、 64 ビ ッ ト と 1 2 8 ビ ッ ト の 形 式 で は こ れ で 正 し い が 、 16 ビ ッ ト と 32 ビ ッ ト の 形 式 で は 指 数 部 に こ の 式 で 得 ら れ る 値 ︵ そ れ ぞ れ 3 と 7 ︶ よ り も 多 い ビ ッ ト ︵ そ れ ぞ れ 5 と 8 ︶ が 割 り 当 て ら れ て い る 。
Wビット の幅を持つワード がある場合、整数 でビットに番号を振る。その番号の範囲は0 − W−1 であり、0番のビットが右端となる。0番のビットは一般にLSB である。
単 精 度 二 進 化 浮 動 小 数 点 数 は 、 32 ビ ッ ト ワ ー ド に 格 納 さ れ る 。
s i g n は 符 号 、 e x p o n e n t は 指 数 部 、 f r a c t i o n は 仮 数 部 で あ る 。
指 数 部 は 下 駄 履 き 表 現 ︵ バ イ ア ス ま た は エ ク セ ス と も 。 符 号 付 数 値 表 現 を 参 照 ︶ と 呼 ば れ る 形 式 で あ り 、 実 際 の 値 に 、 あ る 固 定 値 ︵ こ こ で は e m a x = 1 2 7 ︶ を 加 算 し た も の で あ る 。 こ の よ う な 表 現 に し て い る の は 浮 動 小 数 点 数 同 士 の 大 小 比 較 を 容 易 に す る た め で あ る 。 指 数 部 は 大 き な 値 も 小 さ な 値 も 表 せ る よ う に 負 の 値 に も な る が 、 こ れ を 単 に 2 の 補 数 で 表 す と 、 全 体 の 符 号 s i g n と は 別 に e x p o n e n t も 符 号 を 持 つ こ と に な り 、 単 純 な 大 小 比 較 が で き な く な っ て し ま う 。 そ の た め 、 指 数 部 は バ イ ア ス さ れ て 常 に 正 の 値 と な る よ う な 形 式 で 格 納 さ れ る 。 単 精 度 で は − 1 2 6 ~ + 1 2 7 に 1 2 7 を 加 え て 、 1 ~ 2 5 4 と し て い る ︵ 0 と 2 5 5 は 特 殊 な 意 味 を 持 つ 。 後 述 ︶ 。 こ の 表 現 に よ り ﹁ 指 数 が 正 の 数 ﹂ ﹁ 指 数 が 1 の 数 ﹂ ﹁ 指 数 が 負 の 数 ﹂ ﹁ 0 ﹂ を 、 こ の 順 に 自 然 に 並 べ る こ と が で き る 。 浮 動 小 数 点 数 を 解 釈 す る と き は 、 バ イ ア ス を 減 算 し て 実 際 の 指 数 を 求 め る 。
表 現 可 能 な デ ー タ は 指 数 部 の 値 に よ っ て 区 別 さ れ 、 仮 数 部 の 値 に も 影 響 さ れ る 。 指 数 部 も 仮 数 部 も 符 号 無 し の 二 進 整 数 で あ る こ と に 注 意 さ れ た い ︵ 指 数 部 は 0 – 2 5 5 ︶ 。
種類
exponent(指数部)
fraction(仮数部)
ゼロ
0
0
非正規化数
0
0以外
正規化数
1 – 254
任意
無限大
255
0
NaN
255
0以外の任意
最 も 一 般 的 な 正 規 化 数 で は 、 e x p o n e n t は バ イ ア ス さ れ た 指 数 で あ り 、 f r a c t i o n は 仮 数 の 小 数 点 以 下 の 部 分 で あ る 。 先 ほ ど の ( − 1 ) s × c × b q と 対 応 づ け る と 次 の よ う に な る 。
s = s i g n
q = e x p o n e n t − e m a x ( こ こ で は e m a x = 1 2 7 で あ り 、 換 言 す れ ば 、 指 数 に 1 2 7 を 加 算 し て 格 納 さ れ て い る 。 ﹁ 1 2 7 で バ イ ア ス ﹂ し て い る と も 言 う )
b = 2
c = 1 . f r a c t i o n
正 規 数 に お い て c は 1 以 上 2 未 満 の た め 、 常 に 1 . x x x … と 表 記 で き る 。 こ の た め 、 f r a c t i o n に は x x x … の 部 分 の み を 格 納 し 、 実 質 1 ビ ッ ト 多 い 24 ビ ッ ト 精 度 を 実 現 し て い る 。 こ れ は け ち 表 現 ︵ e c o n o m i z e d f o r m ︶ と 呼 ば れ る 。
な お 、 1 − e m a x = − 1 2 6 が 単 精 度 に お け る 正 規 化 数 の 最 小 の 指 数 で あ る 。
正 規 化 数 以 外 の 場 合
● 非 正 規 化 数 の 場 合 q = − 1 2 6 で 、 c が 0 . f r a c t i o n と す る 。 ︵ q は − 1 2 7 で は な い 。 仮 数 の 小 数 点 以 上 の 部 分 が 0 に な っ て い る 関 係 で 、 指 数 を − 1 2 6 と し て バ ラ ン ス を と っ て い る 。 ︶
● ゼ ロ は 二 種 類 存 在 す る 。 + 0 ︵ s が 0 ︶ と − 0 ︵ s が 1 ︶ で あ る 。
● 無 限 大 も 二 種 類 存 在 す る 。 + ∞ ︵ s が 0 ︶ と − ∞ ︵ s が 1 ︶ で あ る 。
● N a N に も 符 号 や 仮 数 が あ る が 、 分 析 以 外 の 目 的 で は 使 え な い 。 f r a c t i o n の 先 頭 ビ ッ ト で ﹁ s i g n a l i n g N a N ﹂ と ﹁ q u i e t N a N ﹂ を 区 別 す る 。
● N a N と 無 限 大 は e x p o n e n t フ ィ ー ル ド が 全 て 1 で あ る 。
− 1 1 8 . 6 2 5 ︵ 十 進 法 ︶ を I E E E 7 5 4 単 精 度 で 表 現 し て み よ う 。
● ま ず 、 符 号 と 指 数 と 仮 数 に 分 割 す る 必 要 が あ る 。
● 負 の 数 な の で 、 符 号 は 1 と な る 。
● 次 に 、 絶 対 値 を 二 進 法 で 書 く と 、 1 1 1 0 1 1 0 . 1 0 1 と な る ︵ 二 進 記 数 法 を 参 照 さ れ た い ︶ 。
● 小 数 点 を 左 に 移 動 さ せ 、 1 だ け を 左 に 残 す 。 1 1 1 0 1 1 0 . 1 0 1 = 1 . 1 1 0 1 1 0 1 0 1 × 2 6 と な る 。 こ れ が 正 規 化 さ れ た 浮 動 小 数 点 数 で あ る 。
● f r a c t i o n は 小 数 点 の 右 側 だ け で あ り 、 足 り な い ビ ッ ト 数 の ぶ ん だ け 0 で 埋 め 23 ビ ッ ト に す る 。 結 果 は 1 1 0 1 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 で あ る 。
● 指 数 は 6 で あ る が 、 バ イ ア ス を 加 え る 必 要 が あ る 。 32 ビ ッ ト I E E E 7 5 4 形 式 で は 、 バ イ ア ス は 1 2 7 な の で 6 + 1 2 7 = 1 3 3 と な る 。 二 進 法 に 変 換 す る と 1 0 0 0 0 1 0 1 で あ る 。
こ の 結 果 を ま と め る と 以 下 の よ う に な る 。
倍 精 度 も 、 各 フ ィ ー ル ド の 幅 が 広 く な っ て い る だ け で 、 考 え 方 は 同 じ で あ る 。
正 規 化 数 で は 、 指 数 は e m a x = + 1 0 2 3 で バ イ ア ス さ れ る ︵ し た が っ て e は e x p o n e n t − 1 0 2 3 ︶ 。 正 規 化 数 の 指 数 は e : + 1 0 2 3 〜 − 1 0 2 2 ︵ e x p o n e n t : 2 0 4 6 〜 1 ︶ で あ る ︵ e x p o n e n t = 2 0 4 7 の 時 無 限 大 ま た は N a N 、 e x p o n e n t = 0 の 時 非 正 規 化 数 で e = − 1 0 2 2 ︶ 。 正 規 化 数 の 時 仮 数 部 は け ち 表 現 で あ る 。
半精度の交換形式は次のようになる。
また、四倍精度の交換形式は次のようになる。
浮 動 小 数 点 数 の 比 較 は 浮 動 小 数 点 命 令 を 使 う の が 最 良 で あ る 。 し か し 、 形 式 や エ ン デ ィ ア ン や 符 号 が 同 じ で あ れ ば 、 数 値 を ビ ッ ト 列 と し て バ イ ト 単 位 に 比 較 す る こ と が で き る ︵ た だ し 非 数 N a N は 除 く ︶ 。
ふ た つ の 正 の 数 値 a と b に つ い て a < b と い う 比 較 を 行 う 場 合 、 こ れ を 符 号 無 し の 整 数 と 見 な し て 比 較 し て も 同 じ 結 果 を 得 ら れ る よ う に な っ て い る 。 言 い 換 え る と 、 ︵ N a N 以 外 の ︶ 2 つ の 正 の 浮 動 小 数 点 数 は 符 号 無 し 整 数 と し て 比 較 で き る ︵ た だ し 、 エ ン デ ィ ア ン が 異 な る 場 合 に は 比 較 で き な い の で 、 移 植 性 を 問 題 と す る コ ー ド で 共 用 体 を 使 っ て こ れ を 行 う こ と は 推 奨 で き な い ︶ 。 こ れ は 辞 書 式 順 序 の 例 で あ る 。
十 進 浮 動 小 数 点 数 に 対 し て は 、 32 の 倍 数 の ビ ッ ト 数 で の 交 換 形 式 が 定 義 さ れ て い る 。
二 進 の 場 合 と 同 様 、 符 号 、 指 数 、 仮 数 と 符 号 化 し て い く が 、 仮 数 部 は 十 進 の 各 桁 を よ り 詰 め 込 め る よ う 、 B C D な ど で は な く D e n s e l y P a c k e d D e c i m a l お よ び B i n a r y I n t e g e r D e c i m a l ︵ 英 語 版 ︶ を 採 用 し 、 ビ ッ ト の 扱 い が 二 進 と 比 べ 複 雑 に な っ て い る 。 ま た こ の 標 準 で は 、 2 つ の 符 号 化 方 式 ︵ D P D と B I D ︶ の ど ち ら を 使 っ て い る か を 示 す 方 法 を 用 意 し て い な い ︵ 世 の 中 に は エ ン デ ィ ア ン が 2 種 類 あ る が 、 I E E E 7 5 4 が 交 換 形 式 の エ ン デ ィ ア ン を 指 定 し て い な い の と 同 じ で あ る [ 11 ] ︶ 。 い ず れ に せ よ 符 号 ・ 指 数 ・ 仮 数 に よ っ て 表 現 す る こ と に は 変 わ り は な い 。 ま た 、 N a N の 表 現 は 、 二 進 同 様 に 正 規 化 数 と は 別 扱 い で あ る 。
IEEE 754-2008標準では5種類の丸めアルゴリズムが定義されている。うち2種類は最近接な値に丸める方法であり、残り3種類は方向丸め と呼ぶ。
最 近 接 丸 め ︵ 偶 数 ︶
最 も 近 く の 表 現 で き る 値 へ 丸 め る 。 表 現 可 能 な 2 つ の 値 の 中 間 の 値 で あ っ た ら 、 一 番 低 い 仮 数 ビ ッ ト ︵ 桁 ︶ が 0 に な る ほ う を 採 用 す る 。 こ れ は 二 進 で の 標 準 動 作 か つ 十 進 で も 推 奨 と な っ て い る 。
最 近 接 丸 め ︵ 0 か ら 遠 い ほ う へ ︶
最 も 近 く の 表 現 で き る 値 へ 丸 め る 。 表 現 可 能 な 2 つ の 値 の 中 間 の 値 で あ っ た ら 、 正 の 値 な ら よ り 大 き い ほ う 、 負 の 値 な ら よ り 小 さ い ほ う の 値 を 採 用 す る 。
0 方 向 へ の 丸 め
0 に 近 い 側 へ 丸 め る 。 切 り 捨 て ( t r u n c a t i o n ) と も 呼 ば れ る 。
+ ∞ へ の 丸 め
正 の 無 限 大 に 近 い 側 へ 丸 め る 。 切 り 上 げ ( r o u n d i n g u p , c e i l i n g ) と も 呼 ば れ る 。
− ∞ へ の 丸 め
負 の 無 限 大 に 近 い 側 へ 丸 め る 。 切 り 下 げ ( r o u n d i n g d o w n , f l o o r ) と も 呼 ば れ る 。
実装には、サポートしている(基本形式を含む)算術形式に対して次の演算が要求される。
算術演算(加減乗除・平方根・積和算 ・剰余・その他)
変換(複数形式間・文字列との相互・その他)
スケールと量子化
符号の複製・操作(絶対値・符号反転・その他)
比較・全順序
NaNその他の分類・判定
フラグの読み書き
その他の演算
この標準では totalOrder という述語を提供しており、それぞれの形式におけるあらゆる浮動小数点数の全順序 を定義している。通常の大小比較の演算子で大小が決まる場合は、この述語も同じ結果になる。しかし、比較演算子ではNaNとの比較が判定できず、−0 と +0 は等しいという結果になる。totalOrder はそういった場合でも大小を判定し、複数の NaN や同じ数値を異なる符号化方式で表現した十進形式間でも大小を区別する。
I E E E 7 5 4 - 2 0 0 8 で は 5 種 類 の 例 外 が 定 義 さ れ て い る 。 そ れ ぞ れ 、 ︵ 確 定 的 な ア ン ダ ー フ ロ ー を 除 い て ︶ 対 応 す る 状 態 フ ラ グ が 存 在 し 、 例 外 発 生 時 に は 対 応 す る フ ラ グ が 設 定 さ れ る 。 そ れ 以 外 の 動 作 は 定 義 さ れ て い な い が 、 デ フ ォ ル ト ︵ 下 記 ︶ 以 外 の 追 加 の 対 処 が 推 奨 さ れ て い る ︵ 後 述 ︶ 。
5 種 類 の 内 訳 は 以 下 の と お り で あ る 。
● 無 効 な 演 算 ︵ 負 数 に 対 し て 平 方 根 を 求 め よ う と し た な ど ︶ - デ フ ォ ル ト で は q N a N を 返 す 。
● 0 除 算 ︵ 1 / 0 や l o g ( 0 ) な ど ︶ - デ フ ォ ル ト で は ± ∞ を 返 す 。
● オ ー バ ー フ ロ ー ︵ 結 果 が 正 し く 表 現 で き な い ほ ど 大 き く な っ た 場 合 ︶ - 最 近 接 丸 め モ ー ド の 場 合 、 デ フ ォ ル ト で は ± ∞ を 返 す 。
● ア ン ダ ー フ ロ ー ︵ 結 果 が 正 規 数 で 表 現 で き な い ほ ど に 小 さ く 非 0 で あ る が 不 正 確 な 結 果 と な っ た 場 合 ︶ - デ フ ォ ル ト で は 非 正 規 化 数 を 返 す 。
● 不 正 確 - デ フ ォ ル ト で は 指 定 さ れ た モ ー ド の 丸 め を 施 し た 結 果 を 返 す 。
こ れ ら は 、 I E E E 7 5 4 - 1 9 8 5 と 同 一 で あ る 。 た だ し 、 I E E E 7 5 4 - 1 9 8 5 で は ゼ ロ 除 算 例 外 は 除 算 の み だ っ た が 、 I E E E 7 5 4 - 2 0 0 8 で は そ れ 以 外 の 演 算 で も 発 生 す る 。
規格では、様々な形の例外処理 をオプションとして推奨している。例えば、ユーザー定義のデフォルト値を事前に代入しておく方式、トラップ方式(何らかの方式で例外をとらえて制御フローを変化させる)、try/catch などの制御構造を使って例外を処理する方式などである。トラップや例外処理用制御構造はオプションである。
標 準 の 9 章 で は 50 種 類 の 演 算 、 対 数 、 冪 乗 、 三 角 関 数 な ど を 言 語 標 準 で 定 義 す べ き だ と 推 奨 し て い る [ 12 ] 。 こ れ ら は 全 て オ プ シ ョ ン で あ り 、 標 準 に 準 拠 す る の に 必 須 と さ れ て い る わ け で は な い 。 他 に も 丸 め モ ー ド へ の ア ク セ ス と 設 定 の 手 段 [ 13 ] 、 ド ッ ト 積 な ど の 各 種 ベ ク ト ル 演 算 [ 14 ] な ど が 含 ま れ て い る 。 実 装 に あ た っ て は 、 そ の 時 点 の 丸 め モ ー ド に し た が っ て 正 し く 丸 め た 結 果 を 返 さ な け れ ば な ら な い 。 不 正 確 例 外 を 発 生 す る 場 合 は そ の 限 り で は な い が 、 他 の 例 外 が 発 生 す る 場 合 で も 丸 め 処 理 は 正 し く 行 う 必 要 が あ る 。
こ の 標 準 で は 、 一 連 の 演 算 の 並 び の 意 味 論 を 言 語 標 準 で 提 供 す る こ と を 推 奨 し て お り 、 式 の 文 字 通 り の 意 味 の 微 妙 さ と 最 適 化 が 計 算 結 果 に 与 え る 影 響 を 指 摘 し て い る 。 こ の 観 点 は 以 前 の I E E E 7 5 4 - 1 9 8 5 で は 全 く 触 れ ら れ て お ら ず 、 結 果 と し て コ ン パ イ ラ 毎 に 計 算 結 果 が 違 っ て き た り 、 同 じ コ ン パ イ ラ で も 最 適 化 レ ベ ル に よ っ て 計 算 結 果 が 異 な る と い う 状 況 を 招 い て い た 。
プ ロ グ ラ ミ ン グ 言 語 は 、 そ れ ぞ れ の 基 数 に つ い て 、 式 を 計 算 す る と き の 途 中 の 最 小 精 度 を ユ ー ザ ー が 指 定 で き る よ う に す べ き で あ る 。 こ れ を 標 準 で は " p r e f e r r e d W i d t h " と 呼 び 、 プ ロ グ ラ ム の ブ ロ ッ ク 毎 に 設 定 可 能 に す べ き だ と し て い る 。 式 の 計 算 途 中 で 一 時 変 数 に 途 中 結 果 を 保 存 す る と き 、 オ ペ ラ ン ド の 最 大 幅 を 使 い 、 設 定 さ れ て い れ ば " p r e f e r r e d W i d t h " を 使 う べ き で あ る 。 し た が っ て 例 え ば 、 x 8 7 を 対 象 と す る コ ン パ イ ラ は 計 算 途 中 の 結 果 を 拡 張 倍 精 度 で 保 持 す る よ う 指 定 可 能 で あ る こ と が 望 ま し い 。
I E E E 7 5 4 - 1 9 8 5 で は 実 装 の 自 由 度 が 大 き か っ た ︵ 符 号 化 や 例 外 発 生 条 件 な ど ︶ 。 I E E E 7 5 4 - 2 0 0 8 で は 実 装 の 自 由 度 を 狭 め て い る が 、 そ れ で も 若 干 の 自 由 は 残 っ て い る ︵ 特 に 二 進 形 式 ︶ 。 再 現 性 に 関 す る 節 で は 、 再 現 性 の あ る プ ロ グ ラ ム が 書 け る よ う 言 語 標 準 に 推 奨 し て お り ︵ す な わ ち 、 そ の 言 語 の ど の 処 理 系 で も 1 つ の プ ロ グ ラ ム が 同 じ 結 果 と な る こ と ︶ 、 そ の た め に ど う す べ き か を 解 説 し て い る 。
こ の 標 準 で は 、 基 本 形 式 と ﹁ 外 部 文 字 列 ﹂ 形 式 と の 間 で の 変 換 機 能 を 要 求 し て い る [ 15 ] 。 十 進 数 の 文 字 形 式 と の 変 換 は 全 形 式 に つ い て 要 求 さ れ て い る 。 外 部 文 字 列 形 式 に 変 換 し た も の を 元 の 内 部 の 形 式 に 再 変 換 し た と き 、 全 く 同 じ 数 値 に な ら な け れ ば な ら な い 。 N a N の ペ イ ロ ー ド を 保 持 す る と い う 要 求 は な く 、 外 部 文 字 列 形 式 に 変 換 し 数 値 に 再 変 換 し た と き 、 s i g n a l i n g N a N が q u i e t N a N に な る こ と は あ り う る 。
内 部 二 進 形 式 の 値 を 十 進 の 外 部 文 字 列 形 式 に 変 換 す る 場 合 、 以 下 の 十 進 有 効 桁 数 ︵ 以 上 ︶ に す れ ば 再 び そ れ を 内 部 二 進 形 式 に 戻 し た 場 合 に 元 の 内 部 表 現 の 値 を 完 全 に 回 復 す る こ と が で き る [ 16 ] 。
● b i n a r y 1 6 の 場 合 、 5 桁
● b i n a r y 3 2 の 場 合 、 9 桁
● b i n a r y 6 4 の 場 合 、 17 桁
● b i n a r y 1 2 8 の 場 合 、 36 桁
こ れ ら 以 外 の 二 進 形 式 の 場 合 、 必 要 な 桁 数 は 次 の 式 で 計 算 で き る 。
1 + c e i l i n g ( p × l o g 10 2 )
こ こ で 、 p は そ の 二 進 形 式 の 仮 数 の ビ ッ ト 数 で 、 例 え ば b i n a r y 3 2 な ら 24 ビ ッ ト で あ る 。
な お 、 実 装 上 の 限 界 と し て 、 二 進 形 式 と 外 部 文 字 列 形 式 と の 間 の 変 換 で 正 し い 丸 め 結 果 を 保 証 で き な い 場 合 が あ り う る 。 こ の 標 準 で は 、 最 低 で も 上 記 の 最 小 桁 数 よ り 3 桁 多 い 桁 数 ま で は 正 し い 丸 め を 保 証 せ ね ば な ら ず ( s h a l l ) 、 桁 数 無 制 限 に 正 し い 丸 め を 保 証 す べ き で あ る ( s h o u l d ) 。
内 部 十 進 浮 動 小 数 点 形 式 の 場 合 に は 、 外 部 文 字 列 表 現 に 於 い て 以 下 の 桁 数 ︵ 以 上 ︶ を 使 え ば 、 そ れ を 再 び 読 み 込 ん で 内 部 十 進 形 式 に 戻 し た 場 合 に 、 元 の 数 値 を 完 全 に 回 復 す る こ と が で き る 。
● d e c i m a l 3 2 の 場 合 、 7 桁
● d e c i m a l 6 4 の 場 合 、 16 桁
● d e c i m a l 1 2 8 の 場 合 、 34 桁
こ の 標 準 で は 、 十 進 形 式 と 外 部 文 字 列 表 現 の 間 で の 変 換 は い か な る 桁 数 で あ っ て も 正 し い 丸 め を 保 証 せ ね ば な ら な い 。
二 進 と 十 進 の 間 で 正 し く 丸 め を 行 い つ つ 変 換 す る ア ル ゴ リ ズ ム が 議 論 さ れ て お り [ 17 ] 、 評 価 さ れ て い る [ 18 ] 。
^ これは、異なる仕様を採用しているハードウェア上に実装する際のコストへの考慮のためである。
(一) ^ “ F l o a t i n g p o i n t ( G N U C o r e u t i l s 9 . 0 ) ” . w w w . g n u . o r g . 2 0 2 0 年 4 月 10 日 閲 覧 。
(二) ^ た と え ば ﹁ 一 幸 , 首 藤 ( 2 0 0 3 年 6 月 15 日 ) . “ 厳 密 な 浮 動 小 数 点 演 算 セ マ ン テ ィ ク ス の J a v a 実 行 時 コ ン パ イ ラ へ の 実 装 ” . 情 報 処 理 学 会 論 文 誌 . p p . 1 5 7 0 – 1 5 8 2 . 2 0 2 0 年 4 月 10 日 閲 覧 。 ﹂ を 見 よ 。
(三) ^ " F W : I S O / I E C / I E E E 6 0 5 5 9 ( I E E E S t d 7 5 4 - 2 0 0 8 ) " ( M a i l i n g l i s t ) . 1 A p r i l 2 0 1 1 . 2 0 1 2 年 4 月 10 日 閲 覧 。
I S O 規 格 に 採 用 さ れ た こ と を 知 ら せ る 電 子 メ ー ル の 記 録
(四) ^ “ I S O / I E C / I E E E 6 0 5 5 9 : 2 0 1 1 ” ( 英 語 ) . I S O . 2 0 2 0 年 4 月 10 日 閲 覧 。
(五) ^ こ の ﹁ 正 と 負 の 2 つ が あ る 無 限 ﹂ は 、 数 学 で い う 拡 大 実 数 の そ れ に 似 て い る 。 標 準 の 検 討 段 階 で は 、 射 影 幾 何 に お け る 無 限 遠 点 の よ う に 、 符 号 無 し の た だ ひ と つ の ﹁ 無 限 ﹂ だ け が あ る ﹁ 射 影 モ ー ド ﹂ も 議 論 さ れ た が そ ち ら は 採 用 さ れ ず 、 そ の 議 論 に お い て ﹁ ア フ ィ ン モ ー ド ﹂ と 呼 ば れ た も の が 、 実 施 さ れ た I E E E 7 5 4 に お け る ﹁ 数 ﹂ の ﹁ モ デ ル ﹂ で あ る 。
(六) ^ イ ン テ ル 8 0 8 7 及 び そ の 後 継 の F P U に あ る 8 0 b i t の 拡 張 表 現 が 処 理 中 で 使 わ れ た 場 合 に は 、 そ れ に よ る 2 度 の 丸 め で 、 結 果 が 異 な る 場 合 が あ る 。 ま た し ば し ば 言 わ れ る ﹁ 0 . 1 を 10 回 足 し て も 1 に な ら な い ﹂ と い っ た よ う な 不 正 確 さ は 、 こ の 規 定 に 違 反 し て 起 き る わ け で は な い 。
(七) ^ 制 定 に 深 く 関 与 し た カ ハ ン が 指 摘 し た ﹁ 数 表 作 成 者 の ジ レ ン マ ﹂ と は 、 こ の こ と を 指 し て い る 。
(八) ^ I E E E 7 5 4 2 0 0 8 , § 3 . 7
(九) ^ I E E E 7 5 4 2 0 0 8 , § 3 . 7 で は ﹁ 言 語 規 格 は サ ポ ー ト す る そ れ ぞ れ の 基 数 に つ い て 拡 張 可 能 精 度 を サ ポ ー ト す る 機 構 を 定 義 す べ き だ ﹂ と し て い る 。
(十) ^ I E E E 7 5 4 2 0 0 8 , § 3 . 7 で は 、 ﹁ 言 語 規 格 ま た は 実 装 は サ ポ ー ト し て い る 基 数 で の 最 大 幅 の 基 本 形 式 よ り 高 い 精 度 の 拡 張 形 式 を サ ポ ー ト す べ き だ ﹂ と し て い る 。
(11) ^ “ R E : T w o t e c h n i c a l q u e s t i o n s o n I E E E S t d 7 5 4 - 2 0 0 8 ” . 2 0 1 4 年 2 月 23 日 時 点 の オ リ ジ ナ ル よ り ア ー カ イ ブ 。 2 0 1 2 年 4 月 10 日 閲 覧 。
(12) ^ I E E E 7 5 4 2 0 0 8 , C l a u s e 9
(13) ^ I E E E 7 5 4 2 0 0 8 , § 9 . 3
(14) ^ I E E E 7 5 4 2 0 0 8 , § 9 . 4
(15) ^ I E E E 7 5 4 2 0 0 8 , § 5 . 1 2
(16) ^ I E E E 7 5 4 2 0 0 8 , § 5 . 1 2 . 2
(17) ^ G a y , D a v i d M . ( N o v e m b e r 3 0 , 1 9 9 0 ) , C o r r e c t l y r o u n d e d b i n a r y - d e c i m a l a n d d e c i m a l - b i n a r y c o n v e r s i o n s , N u m e r i c a l A n a l y s i s M a n u s c r i p t , M u r r y H i l l , N J , U S A : A T & T L a b o r a t o r i e s , 9 0 - 1 0 , http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.31.4049
(18) ^ P a x s o n , V e r n ; K a h n , W i l l i a m ( M a y 2 2 , 1 9 9 1 ) , A P r o g r a m f o r T e s t i n g I E E E D e c i m a l – B i n a r y C o n v e r s i o n , M a n u s c r i p t , http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.144.5889 2 0 1 2 年 3 月 28 日 閲 覧 。
Ulf Adams (2019-10-10). “Ryū revisited: printf floating point conversion”. Proceedings of the ACM on Programming Languages 3 (OOPSLA ). doi :10.1145/3360595 .
Noble Mushtak; Daniel Lemire (28 February 2023). "Fast Number Parsing Without Fallback". arXiv :2212.06644 。