IEEE 二進位浮點數算術標準 (IEEE 754 )是 ぜ 20世 せい 纪80年代 ねんだい 以来 いらい 最 さい 廣 こう 泛使用 しよう 的 てき 浮點數 すう 運算 うんざん 標準 ひょうじゅん ,為 ため 許多 きょた CPU 與 あずか 浮點運算 うんざん 器 き 所 ところ 採用 さいよう 。這個標準 ひょうじゅん 定義 ていぎ 了 りょう 表示 ひょうじ 浮點數 すう 的 てき 格式 かくしき (包括 ほうかつ 負 まけ 零 れい -0 )與 あずか 反 はん 常 つね 值(denormal number),一些特殊數值((無窮 むきゅう (Inf)與 あずか 非 ひ 數 すう 值 (NaN)),以及這些數 すう 值的「浮點數 すう 運算 うんざん 子 こ 」;它也指 ゆび 明 あかり 了 りょう 四 よん 種 しゅ 數 かず 值修約 やく 規則 きそく 和 わ 五 ご 種 しゅ 例外 れいがい 狀況 じょうきょう (包括 ほうかつ 例外 れいがい 發生 はっせい 的 てき 時機 じき 與 あずか 處理 しょり 方式 ほうしき )。
IEEE 754規定 きてい 了 りょう 四種表示浮點數值的方式:單 たん 精確 せいかく 度 ど (32位 い 元 もと )、雙 そう 精確 せいかく 度 ど (64位 い 元 もと )、延伸 えんしん 單 たん 精確 せいかく 度 ど (43位 い 元 もと 以上 いじょう ,很少使用 しよう )與 あずか 延伸 えんしん 雙 そう 精確 せいかく 度 ど (79位 い 元 もと 以上 いじょう ,通常 つうじょう 以80位 い 元 もと 實 じつ 做)。只 ただ 有 ゆう 32位 い 元 もと 模 も 式 しき 有 ゆう 強制 きょうせい 要求 ようきゅう ,其他都 と 是 ぜ 選擇 せんたく 性 せい 的 てき 。大 だい 部分 ぶぶん 程 ほど 式 しき 語 ご 言 げん 都 と 提供 ていきょう 了 りょう IEEE浮点数 すう 格式 かくしき 與 あずか 算術 さんじゅつ ,但 ただし 有 ゆう 些將其列為 ため 非 ひ 必需 ひつじゅ 的 てき 。例 れい 如,IEEE 754問 もん 世 よ 之 の 前 ぜん 就有的 てき C語 ご 言 げん ,現在 げんざい 包括 ほうかつ 了 りょう IEEE算術 さんじゅつ ,但 ただし 不 ふ 算 さん 作 さく 強制 きょうせい 要求 ようきゅう (C語 ご 言 げん 的 てき float 通常 つうじょう 是 ぜ 指 ゆび IEEE單 たん 精確 せいかく 度 ど ,而double 是 ぜ 指 ゆび 雙 そう 精確 せいかく 度 ど )。
該標準 ひょうじゅん 的 てき 全 ぜん 稱 しょう 為 ため IEEE二進位浮點數算術標準(ANSI/IEEE Std 754-1985) ,又 また 稱 たたえ IEC 60559:1989,微 ほろ 處理 しょり 器 き 系統的 けいとうてき 二進位浮點數算術 (本來 ほんらい 的 てき 編 へん 號 ごう 是 ぜ IEC 559:1989)[ 1] 。後來 こうらい 還 かえ 有 ゆう 「與 あずか 基數 きすう 無關 むせき 的 てき 浮點數 すう 」的 てき 「IEEE 854-1987標準 ひょうじゅん 」,有 ゆう 規定 きてい 基數 きすう 為 ため 2跟10的 てき 狀況 じょうきょう 。现在最新 さいしん 標準 ひょうじゅん 是 ぜ 「ISO/IEC/IEEE FDIS 60559:2020」。
在 ざい 六 ろく 、七 なな 十 じゅう 年代 ねんだい ,各 かく 家 いえ 计算机 つくえ 公司 こうし 的 てき 各 かく 个型号 ごう 的 てき 计算机 つくえ ,有 ゆう 着 ぎ 千差万别的浮点数表示,却没有 ゆう 一个业界通用的标准。这给数 すう 据 すえ 交换、计算机 つくえ 协同工作 こうさく 造成 ぞうせい 了 りょう 极大不便 ふべん 。IEEE的 てき 浮点数 すう 专业小 しょう 组于七 なな 十年代末期开始酝酿浮点数的标准。在 ざい 1980年 ねん ,英 えい 特 とく 尔公司 こうし 就推出 で 了 りょう 单片的 てき 8087浮点数 すう 协处理 り 器 き ,其浮点数 てんすう 表示法 ひょうじほう 及定义的运算具有 ぐゆう 足 あし 够的合理 ごうり 性 せい 、先 さき 进性,被 ひ IEEE采 さい 用作 ようさく 为浮点数 てんすう 的 てき 标准,于1985年 ねん 发布。而在此前,这一标准的内容已在八十年代初期被各计算机公司广泛采用,成 なり 了 りょう 事 こと 实上的 てき 业界工 こう 业标准 じゅん 。加州 かしゅう 大学 だいがく 伯 はく 克利 かつとし 分校 ぶんこう 的 てき 数 すう 值计算 さん 与 あずか 计算机 つくえ 科学 かがく 教授 きょうじゅ 威 い 廉 かど ·卡韩被 ひ 誉 ほまれ 为“浮点数 すう 之 の 父 ちち ”。
一 いち 個 こ 浮點數 すう (Value) 的 てき 表示 ひょうじ 其實可 か 以這樣 さま 表示 ひょうじ :
Value
=
sign
×
exponent
×
fraction
{\displaystyle {\texttt {Value}}={\texttt {sign}}\times {\texttt {exponent}}\times {\texttt {fraction}}}
也就是 ぜ 浮點數 すう 的 てき 實際 じっさい 值 ,等 とう 於符號 ふごう 位 い (sign bit)乘 じょう 以指數 しすう 偏 へん 移 うつり 值 (exponent bias)再 さい 乘 じょう 以分數 ぶんすう 值 (fraction)。
以下 いか 内容 ないよう 是 ぜ IEEE 754對 たい 浮點數 すう 格式 かくしき 的 てき 描述。
本文 ほんぶん 表示 ひょうじ 位 い 元 もと 的 てき 約定 やくじょう [ 编辑 ]
把 わ W个位 い 元 もと (bit)的 てき 数 すう 据 すえ ,从内存 そん 地 ち 址 し 低 てい 端 はし 到 いた 高 こう 端 はし ,以0到 いた W−1編 へん 碼。通常 つうじょう 將 しょう 内 ない 存 そん 地 ち 址 し 低 てい 端 はし 的 てき 位 い 元 もと 写 うつし 在 ざい 最 さい 右邊 うへん ,称 しょう 作 さく 最低 さいてい 有效 ゆうこう 位 い (Least Significant Bit, LSB),代表 だいひょう 最小 さいしょう 的 てき 位 い 元 もと ,改變 かいへん 時 じ 對 たい 整体 せいたい 數 すう 值影響 えいきょう 最小 さいしょう 的 てき 位 い 元 もと 。聲明 せいめい 這一 いち 點 てん 的 てき 必要 ひつよう 性 せい 在 ざい 于X86体系 たいけい 架 か 构是小 しょう 端 はし 序 じょ 的 まと 数 すう 据 すえ 存 そん 储。
对于十 じゅう 进制整数 せいすう N,必要 ひつよう 时表示 ひょうじ 为N10 以与二 に 进制的 てき 数 すう 的 てき 表示 ひょうじ N2 相 あい 区分 くぶん 。
对于一 いち 个数,其二 そのじ 进制科学 かがく 计数法 ほう 表示 ひょうじ 下 か 的 てき 指数 しすう 的 てき 值,下 しも 文 ぶん 称 しょう 之 の 为指数 しすう 的 てき 实际值 ;而根据 すえ IEEE 754标准对指数 すう 部分 ぶぶん 的 てき 编码的 てき 值,称 しょう 之 の 为浮点数 てんすう 表示法 ひょうじほう 指數 しすう 域 いき 的 てき 编码值 。
IEEE 754浮点数 すう 的 てき 三 さん 个域
二進位浮點數是以符號 ふごう 數 すう 值表示法 ひょうじほう 的 てき 格式 かくしき 儲 もうか 存 そん ——最高 さいこう 有效 ゆうこう 位 い 被 ひ 指定 してい 為 ため 符號 ふごう 位 い (sign bit);「指數 しすう 部 ぶ 份」,即 そく 次 つぎ 高 だか 有效 ゆうこう 的 てき e个位元 もと ,存 そん 储指數 すう 部分 ぶぶん ;最 さい 后 きさき 剩 あま 下 した 的 てき f个低有效 ゆうこう 位 い 的 てき 位 い 元 もと ,存 そん 储「有效 ゆうこう 数 すう 」(significand)的 てき 小數 しょうすう 部 ぶ 份(在 ざい 非 ひ 規約 きやく 形式 けいしき 下 か 整數 せいすう 部 ぶ 份默認 もくにん 為 ため 0,其他情況 じょうきょう 下 か 一律 いちりつ 默認 もくにん 為 ため 1)。
指數 しすう 偏 へん 移 うつり 值(exponent bias),即 そく 浮点数 すう 表示法 ひょうじほう 中指 なかゆび 數 すう 域 いき 的 てき 编码值,等 とう 于指數 すう 的 てき 实际值加上 じょう 某 ぼう 個 こ 固定 こてい 的 てき 值,IEEE 754标准规定该固定 こてい 值为
2
e
−
1
−
1
{\displaystyle 2^{e-1}-1}
[ 2] ,其中的 てき
e
{\displaystyle e}
为存储指数 すう 的 てき 位 い 元 もと 的 てき 长度。
以单精度 せいど 浮点数 すう 为例,它的指数 しすう 域 いき 是 ぜ 8个位元 もと ,固定 こてい 偏 へん 移 うつり 值是
2
8
−
1
−
1
=
128
−
1
=
127
{\displaystyle 2^{8-1}-1=128-1=127}
。此為有 ゆう 號 ごう 數 すう 的 てき 表示 ひょうじ 方式 ほうしき ,单精度 せいど 浮点数 すう 的 てき 指数 しすう 部分 ぶぶん 实际取值是从-126到 いた 127(-127和 わ 128被 ひ 用作 ようさく 特殊 とくしゅ 值处理 り ,见下方 かた 「非 ひ 规约形式 けいしき 的 てき 浮点数 すう 」和 かず 「特殊 とくしゅ 值 」)。例 れい 如指数 すう 实际值为
17
10
{\displaystyle 17_{10}}
,在 ざい 单精度 せいど 浮点数 すう 中 ちゅう 的 てき 指数 しすう 域 いき 编码值为
144
10
{\displaystyle 144_{10}}
,即 そく
144
10
=
17
10
+
127
10
{\displaystyle 144_{10}=17_{10}+127_{10}}
。
采 さい 用 よう 指数 しすう 的 てき 实际值加上 じょう 固定 こてい 的 てき 偏 へん 移 うつり 值的办法表示 ひょうじ 浮点数 すう 的 てき 指数 しすう ,好 こう 处是可 か 以用长度为
e
{\displaystyle e}
个位元 もと 的 てき 无符号 ごう 整数 せいすう 来 らい 表示 ひょうじ 所有 しょゆう 的 てき 指数 しすう 取 と 值,这使得 とく 两个浮点数 すう 的 てき 指数 しすう 大小 だいしょう 的 てき 比 ひ 较更为容易 ようい ,实际上 じょう 可 か 以按照 あきら 字典 じてん 次序 じじょ 比 ひ 较两个浮点 てん 表示 ひょうじ 的 てき 大小 だいしょう 。
这种移 うつり 码表示 ひょうじ 的 てき 指数 しすう 部分 ぶぶん ,中 ちゅう 文 ぶん 称 しょう 作 さく 阶码 。
如果浮点数 すう 中指 なかゆび 数 すう 部分 ぶぶん 的 てき 编码值在
0
<
exponent
⩽
2
e
−
2
{\displaystyle 0<{\textrm {exponent}}\leqslant 2^{e}-2}
之 これ 間 あいだ ,且在科學 かがく 表示法 ひょうじほう 的 てき 表示 ひょうじ 方式 ほうしき 下 か ,分數 ぶんすう (fraction)部分 ぶぶん 最高 さいこう 有效 ゆうこう 位 い (即 そく 整數 せいすう 位 い )是 これ
1
{\displaystyle 1}
,那 な 么這個 こ 浮点數 すう 將 はた 被 ひ 稱 しょう 為 ため 规约形式 けいしき 的 てき 浮点数 すう 。“规约”是 ぜ 指 ゆび 用 よう 唯 ただ 一确定的浮点形式去表示一个值。
由 よし 于这种表示 ひょうじ 下 か 的 てき 尾 お 数 すう 有 ゆう 一位隐含的二进制有效数字,为了与 あずか 二 に 进制科学 かがく 计数法 ほう 的 てき 尾 お 数 すう (mantissa)相 しょう 区 く 别,IEEE754称 しょう 之 の 为有效 ゆうこう 数 すう (significant)。
舉例來 らい 說 せつ ,雙 そう 精度 せいど (64-bit) 的 てき 規約 きやく 形式 けいしき 浮點數 すう 在 ざい 指數 しすう 偏 へん 移 うつり 值的值域為 ため
00000000001
{\displaystyle 00000000001}
(11-bit) 到 いた
11111111110
{\displaystyle 11111111110}
,在 ざい 分數 ぶんすう 部分 ぶぶん 則 そく 是 ぜ
000.....000
{\displaystyle 000.....000}
到 いた
111.....111
{\displaystyle 111.....111}
(52-bit)
如果浮点数 すう 的 てき 指數 しすう 部分 ぶぶん 的 てき 编码值是0,分 ふん 數 すう 部分 ぶぶん 非 ひ 零 れい ,那 な 么这个浮点数 てんすう 將 はた 被 ひ 稱 しょう 為 ため 非 ひ 规约形式 けいしき 的 てき 浮点数 すう 。一般 いっぱん 是 ぜ 某 ぼう 個 こ 數字 すうじ 相當 そうとう 接近 せっきん 零 れい 時 じ 才 ざい 會 かい 使用 しよう 非 ひ 規約 きやく 型式 けいしき 來 らい 表示 ひょうじ 。
IEEE 754标准规定:非 ひ 规约形式 けいしき 的 てき 浮点数 すう 的 てき 指数 しすう 偏 へん 移 うつり 值比规约形式 けいしき 的 てき 浮点数 すう 的 てき 指数 しすう 偏 へん 移 うつり 值小1 。例 れい 如,最小 さいしょう 的 てき 规约形式 けいしき 的 てき 单精度 せいど 浮点数 すう 的 てき 指数 しすう 部分 ぶぶん 编码值为1,指数 しすう 的 てき 实际值为-126;而非规约的 てき 单精度 せいど 浮点数 すう 的 てき 指数 しすう 域 いき 编码值为0,对应的 てき 指数 しすう 实际值也是 ぜ -126而不是 ぜ -127。实际上 じょう 非 ひ 规约形式 けいしき 的 てき 浮点数 すう 仍然是 ぜ 有效 ゆうこう 可 か 以使用 しよう 的 てき ,只 ただ 是 ぜ 它们的 てき 绝对值已经小于所有 しょゆう 的 てき 规约浮点数 すう 的 てき 绝对值;即 そく 所有 しょゆう 的 てき 非 ひ 规约浮点数 すう 比 ひ 规约浮点数 すう 更 さら 接近 せっきん 0。规约浮点数 すう 的 てき 尾 お 数 すう 大 だい 于等于1且小于2,而非规约浮点数 すう 的 てき 尾 お 数 すう 小 しょう 于1且大于0。
除 じょ 了 りょう 规约浮点数 すう ,IEEE754-1985标准采 さい 用 よう 非 ひ 规约浮点数 すう ,用 よう 来 らい 解 かい 决填补绝对值意 い 义下最小 さいしょう 规格数 すう 与 あずか 零 れい 的 てき 距离。(举例说,正数 せいすう 下 か ,最大 さいだい 的 てき 非 ひ 规格数 すう 等 とう 于最小 さいしょう 的 てき 规格数 すう 。而一个浮点数编码中,如果exponent=0,且尾 かつお 数 すう 部分 ぶぶん 不 ふ 为零,那 な 么就按照非 ひ 规约浮点数 すう 来 らい 解析 かいせき )非 ひ 规约浮点数 すう 源 げん 于70年代 ねんだい 末 まつ IEEE浮点数 すう 标准化 か 专业技 わざ 术委员会酝酿浮点数 すう 二进制标准时,Intel公司 こうし 对渐进式 しき 下 か 溢出 (gradual underflow)的 てき 力 りょく 荐。当 とう 时十 じゅう 分 ふん 流行 りゅうこう 的 てき DEC VAX 机 つくえ 的 てき 浮点数表示 すうひょうじ 采 さい 用 よう 了 りょう 突然 とつぜん 式 しき 下 か 溢出 (abrupt underflow)。如果没 ぼつ 有 ゆう 渐进式 しき 下 か 溢出,那 な 么0与 あずか 绝对值最小 さいしょう 的 てき 浮点数 すう 之 の 间的距离(gap)将 はた 大 だい 于相邻的小浮 こおけ 点数 てんすう 之 の 间的距离。例 れい 如单精度 せいど 浮点数 すう 的 てき 绝对值最小 さいしょう 的 てき 规约浮点数 すう 是 ぜ
1.0
×
2
−
126
{\displaystyle 1.0\times 2^{-126}}
,它与绝对值次小 しょう 的 てき 规约浮点数 すう 之 の 间的距离为
2
−
126
×
2
−
23
=
2
−
149
{\displaystyle 2^{-126}\times 2^{-23}=2^{-149}}
。如果不 ふ 采 さい 用 よう 渐进式 しき 下 か 溢出,那 な 么绝对值最小 さいしょう 的 てき 规约浮点数 すう 与 あずか 0的 てき 距离是 ぜ 相 しょう 邻的小浮 こおけ 点数 てんすう 之 の 间距离的
2
23
{\displaystyle 2^{23}}
倍 ばい ,可 か 以说是 ぜ 非常 ひじょう 突然 とつぜん 的 てき 下 か 溢出到 いた 0。这种情 じょう 况的一种糟糕后果是:两个不等 ふとう 的 てき 小浮 こおけ 点数 てんすう X与 あずか Y相 あい 减,结果将 はた 是 ぜ 0。训练有 ゆう 素的 すてき 数 すう 值分析 ぶんせき 人 じん 员可能会 のうかい 适应这种限 げん 制 せい 情 じょう 况,但 ただし 对于普通 ふつう 的 てき 程 ほど 序 じょ 员就很容易 ようい 陷 おちい 入 にゅう 错误了 りょう 。采 さい 用 よう 了 りょう 渐进式 しき 下 か 溢出后 きさき 将 はた 不 ふ 会 かい 出 で 现这种情况。例 れい 如对于单精度 せいど 浮点数 すう ,指数 しすう 部分 ぶぶん 实际最小 さいしょう 值是(-126),对应的 てき 尾 お 数 すう 部分 ぶぶん 从
1.1111
…
11
{\displaystyle 1.1111\ldots 11}
,
1.1111
…
10
{\displaystyle 1.1111\ldots 10}
一 いち 直 ちょく 到 いた
0.0000
…
10
{\displaystyle 0.0000\ldots 10}
,
0.0000
…
01
{\displaystyle 0.0000\ldots 01}
,
0.0000
…
00
{\displaystyle 0.0000\ldots 00}
相 あい 邻两小浮 こおけ 点数 てんすう 之 の 间的距离(gap)都 みやこ 是 ただし
2
−
126
×
2
−
23
=
2
−
149
{\displaystyle 2^{-126}\times 2^{-23}=2^{-149}}
;而与0最近 さいきん 的 てき 浮点数 すう (即 そく 最小 さいしょう 的 てき 非 ひ 规约数 すう )也是
2
−
126
×
2
−
23
=
2
−
149
{\displaystyle 2^{-126}\times 2^{-23}=2^{-149}}
。
這里有 ゆう 三個特殊值需要指出:
如果指數 しすう 是 ぜ 0并且尾 かつお 數 すう 的 てき 小數 しょうすう 部分 ぶぶん 是 ぜ 0,這個數 すう ±0(和 わ 符號 ふごう 位 い 相關 そうかん )
如果指數 しすう =
2
e
−
1
{\displaystyle 2^{e}-1}
并且尾 かつお 數 すう 的 てき 小數 しょうすう 部分 ぶぶん 是 ぜ 0,這個數 すう 是 ぜ ±∞ (同樣 どうよう 和 わ 符號 ふごう 位 い 相關 そうかん )
如果指數 しすう =
2
e
−
1
{\displaystyle 2^{e}-1}
并且尾 かつお 數 すう 的 てき 小數 しょうすう 部分 ぶぶん 非 ひ 0,這個數表示 すうひょうじ 為 ため 非 ひ 數 かず (NaN) 。
以上 いじょう 規則 きそく ,總 そう 結 ゆい 如下:
形式 けいしき
指數 しすう
小數 しょうすう 部分 ぶぶん
零 れい
0
0
非 ひ 正規 せいき 形式 けいしき
0
大 だい 于0小 しょう 于1
正規 せいき 形式 けいしき
1
{\displaystyle 1}
到 いた
2
e
−
2
{\displaystyle 2^{e}-2}
大 だい 于等于1小 しょう 于2
無窮 むきゅう
2
e
−
1
{\displaystyle 2^{e}-1}
0
NaN
2
e
−
1
{\displaystyle 2^{e}-1}
非 ひ 0
單精度 たんせいど 二 に 進 しん 制 せい 小數 しょうすう ,使用 しよう 32個 こ 位 い 元 もと 存 そん 儲 もうか 。
比 ひ 特 とく 长度:1 8 23
名称 めいしょう :S Exp Fraction
比 ひ 特 とく 编号:31 30至 いたり 23偏 へん 正 せい 值(實際 じっさい 的 てき 指數 しすう 大小 だいしょう +127) 22至 いたり 0位 い 編 へん 號 ごう (從 したがえ 右邊 うへん 開始 かいし 為 ため 0)
S為 ため 符號 ふごう 位 い ,Exp為 ため 指數 しすう 位 い ,Fraction為 ため 有效 ゆうこう 數 すう 位 い 。
指數 しすう 部分 ぶぶん 即 そく 使用 しよう 所謂 いわゆる 的 てき 偏 へん 正 せい 值形式 けいしき 表示 ひょうじ ,偏 へん 正 せい 值為實際 じっさい 的 てき 指數 しすう 大小 だいしょう 與一 よいち 個 こ 固定 こてい 值(32位 い 的 てき 情況 じょうきょう 是 ぜ 127)的 てき 和 わ 。采 さい 用 よう 這種方式 ほうしき 表示 ひょうじ 的 てき 目的 もくてき 是 ぜ 簡化比較 ひかく 。因 よし 為 ため ,指數 しすう 的 てき 值可能 かのう 為 ため 正也 まさや 可能 かのう 為 ため 負 まけ ,如果采 さい 用 よう 二 に 補數 ほすう 表示 ひょうじ 的 てき 話 ばなし ,全體 ぜんたい 符號 ふごう 位 い S和 わ Exp自身 じしん 的 てき 符號 ふごう 位 い 將 はた 導 しるべ 致不能 ふのう 簡單 かんたん 的 てき 進行 しんこう 大小 だいしょう 比較 ひかく 。正因 まさより 為 ため 如此,指數 しすう 部分 ぶぶん 通常 つうじょう 采 さい 用 よう 一個無符號的正數值存儲。單精度 たんせいど 的 てき 指數 しすう 部分 ぶぶん 是 ぜ −126~+127加 か 上 じょう 偏 へん 移 うつり 值127,指數 しすう 值的大小 だいしょう 從 したがえ 1~254(0和 わ 255是 ぜ 特殊 とくしゅ 值)。浮點小數 しょうすう 計算 けいさん 時 じ ,指數 しすう 值減去 さ 偏 へん 正 せい 值將是 ぜ 實際 じっさい 的 てき 指數 しすう 大小 だいしょう 。
单精度 せいど 浮点数 すう 各 かく 种极值情况:
类别
正 せい 负号
实际指数 しすう
有 ゆう 偏 へん 移 うつり 指数 しすう
指数 しすう 域 いき
尾 お 数 すう 域 いき
数 かず 值
零 れい
0
-127
0
0000 0000
000 0000 0000 0000 0000 0000
0.0
负零
1
-127
0
0000 0000
000 0000 0000 0000 0000 0000
−0.0
1
0
0
127
0111 1111
000 0000 0000 0000 0000 0000
1.0
-1
1
0
127
0111 1111
000 0000 0000 0000 0000 0000
−1.0
最小 さいしょう 的 てき 非 ひ 规约数 すう
*
-126
0
0000 0000
000 0000 0000 0000 0000 0001
±2−23 × 2−126 = ±2−149 ≈ ±1.4×10-45
中 ちゅう 间大小 しょう 的 てき 非 ひ 规约数 すう
*
-126
0
0000 0000
100 0000 0000 0000 0000 0000
±2−1 × 2−126 = ±2−127 ≈ ±5.88×10-39
最大 さいだい 的 てき 非 ひ 规约数 すう
*
-126
0
0000 0000
111 1111 1111 1111 1111 1111
±(1−2−23 ) × 2−126 ≈ ±1.18×10-38
最小 さいしょう 的 てき 规约数 すう
*
-126
1
0000 0001
000 0000 0000 0000 0000 0000
±2−126 ≈ ±1.18×10-38
最大 さいだい 的 てき 规约数 すう
*
127
254
1111 1110
111 1111 1111 1111 1111 1111
±(2−2−23 ) × 2127 ≈ ±3.4×1038
正 せい 无穷
0
128
255
1111 1111
000 0000 0000 0000 0000 0000
+∞
负无穷
1
128
255
1111 1111
000 0000 0000 0000 0000 0000
−∞
NaN
*
128
255
1111 1111
非 ひ 全 ぜん 0
NaN
* 符号 ふごう 位 い 可 か 以为0或 ある 1 .
雙 そう 精度 せいど 二 に 進 しん 制 せい 小數 しょうすう ,使用 しよう 64個 こ 位 い 元 もと 存 そん 儲 もうか 。
比 ひ 特 とく 长度:1 11 52
名称 めいしょう :S Exp Fraction
比 ひ 特 とく 编号:63 62至 いたり 52偏 へん 正 せい 值(實際 じっさい 的 てき 指數 しすう 大小 だいしょう +1023) 51至 いたり 0位 い 編 へん 號 ごう (從 したがえ 右邊 うへん 開始 かいし 為 ため 0)
S為 ため 符號 ふごう 位 い ,Exp為 ため 指數 しすう 位 い ,Fraction為 ため 有效 ゆうこう 數 すう 位 い 。指數 しすう 部分 ぶぶん 即 そく 使用 しよう 所謂 いわゆる 的 てき 偏 へん 正 せい 值形式 しき 表示 ひょうじ ,偏 へん 正 せい 值為實際 じっさい 的 てき 指數 しすう 大小 だいしょう 與一 よいち 個 こ 固定 こてい 值(64位 い 的 てき 情況 じょうきょう 是 ぜ 1023)的 てき 和 わ 。采 さい 用 よう 這種方式 ほうしき 表示 ひょうじ 的 てき 目的 もくてき 是 ぜ 簡化比較 ひかく 。因 よし 為 ため ,指數 しすう 的 てき 值可能 かのう 為 ため 正也 まさや 可能 かのう 為 ため 負 まけ ,如果采 さい 用 よう 二 に 補數 ほすう 表示 ひょうじ 的 てき 話 ばなし ,全體 ぜんたい 符號 ふごう 位 い S和 わ Exp自身 じしん 的 てき 符號 ふごう 位 い 將 はた 導 しるべ 致不能 ふのう 簡單 かんたん 的 てき 進行 しんこう 大小 だいしょう 比較 ひかく 。正因 まさより 為 ため 如此,指數 しすう 部分 ぶぶん 通常 つうじょう 采 さい 用 よう 一個無符號的正數值存儲。雙 そう 精度 せいど 的 てき 指數 しすう 部分 ぶぶん 是 ぜ −1022~+1023加 か 上 じょう 1023,指數 しすう 值的大小 だいしょう 從 したがえ 1~2046(0(2進 しん 位 い 全 ぜん 為 ため 0)和 わ 2047(2進 しん 位 い 全 ぜん 為 ため 1)是 ぜ 特殊 とくしゅ 值)。浮點小數 しょうすう 計算 けいさん 時 じ ,指數 しすう 值減去 さ 偏 へん 正 せい 值將是 ぜ 實際 じっさい 的 てき 指數 しすう 大小 だいしょう 。
浮点数 すう 基本 きほん 上 じょう 可 か 以按照 あきら 符号 ふごう 位 い 、指数 しすう 域 いき 、尾 お 数 すう 域 いき 的 てき 顺序作 さく 字典 じてん 比 ひ 较。显然,所有 しょゆう 正数 せいすう 大 だい 于负数 すう ;正 せい 负号相 しょう 同 どう 时,指数 しすう 的 てき 二进制表示法更大的其浮点数值更大。
任 にん 何 なん 有效 ゆうこう 數 すう 上 じょう 的 てき 運算 うんざん 結果 けっか ,通常 つうじょう 都 と 存 そん 放 ひ 在 ざい 較長的 てき 暫存器 き 中 ちゅう ,當 とう 結果 けっか 被 ひ 放 ひ 回 かい 浮點格式 かくしき 時 じ ,必須 ひっす 將 はた 多 た 出來 でき 的 てき 位 い 元 もと 丟棄。
有 ゆう 多種 たしゅ 方法 ほうほう 可 か 以用來 らい 執行 しっこう 捨入作業 さぎょう ,實際 じっさい 上 じょう IEEE標準 ひょうじゅん 列 れつ 出 で 4種 しゅ 不同 ふどう 的 てき 方法 ほうほう :
捨入到 いた 最 さい 接近 せっきん :舍 しゃ 入 いれ 到 いた 最 さい 接近 せっきん ,在 ざい 一样接近的情况下偶数优先(Ties To Even,这是默 だま 认的舍 しゃ 入方 いりがた 式 しき ):会 かい 将 はた 结果舍 しゃ 入 にゅう 为最接近 せっきん 且可以表示 ひょうじ 的 てき 值,但 ただし 是 ぜ 当 とう 存在 そんざい 两个数 すう 一样接近的时候,则取其中的 てき 偶数 ぐうすう (在 ざい 二进制中是以0结尾的 てき )。
朝 あさ +∞方向 ほうこう 捨入 :會 かい 將 はた 結果 けっか 朝 あさ 正 ただし 無限 むげん 大 だい 的 てき 方向 ほうこう 捨入。
朝 あさ -∞方向 ほうこう 捨入 :會 かい 將 はた 結果 けっか 朝 あさ 負 ふ 無限 むげん 大 だい 的 てき 方向 ほうこう 捨入。
朝 あさ 0方向 ほうこう 捨入 :會 かい 將 はた 結果 けっか 朝 あさ 0的 てき 方向 ほうこう 捨入。
下 しも 述 じゅつ 函数 かんすう 必须提供 ていきょう :
加 か 减乘除 じょうじょ (Add、subtract、multiply、divide)。在 ざい 加 か 减运算 さん 中 ちゅう 負 まけ 零 れい 與 あずか 零 れい 相等 そうとう :
−
0.0
=
0.0
{\displaystyle -0.0=0.0}
平方根 へいほうこん (Square root):
x
≥
0
(
x
≥
0
)
{\displaystyle {\sqrt {x}}\geq 0(x\geq 0)}
,另規定 きてい
−
0.0
=
−
0.0
{\displaystyle {\sqrt {-0.0}}=-0.0}
浮点余 あまり 数 すう 。返 かえし 回 かい 值
x
−
(
r
o
u
n
d
(
x
/
y
)
∗
y
)
{\displaystyle x-(round(x/y)*y)}
。
近似 きんじ 到 いた 最近 さいきん 的 てき 整数 せいすう
r
o
u
n
d
(
x
)
{\displaystyle round(x)}
。如果恰好 かっこう 在 ざい 两个相 しょう 邻整数 すう 之 の 间,则近似 きんじ 到 いた 偶数 ぐうすう 。
比 ひ 较运算 さん . -Inf <負 まけ 的 てき 規約 きやく 浮點數 すう 數 すう <負 まけ 的 てき 非 ひ 規約 きやく 浮點數 すう < -0.0 = 0.0 <正 せい 的 てき 非 ひ 規約 きやく 浮點數 すう <正 せい 的 てき 規約 きやく 浮點數 すう < Inf;
特殊 とくしゅ 比較 ひかく : -Inf = -Inf, Inf = Inf, NaN與 あずか 任 にん 何 なん 浮點數 すう (包括 ほうかつ 自身 じしん )的 てき 比較 ひかく 結果 けっか 都 と 為 ため 假 かり ,即 そく (NaN ≠ x) = false.
copysign(x, y)
: copysign(x, y)
返 かえし 回 かい 的 てき 值由x的 てき 不 ふ 带符号 ごう 的 てき 部 ぶ 份和y的 てき 符号 ふごう 组成。因 よし 此abs(x)
等 とう 于copysign(x, 1.0)
。copysign
可 か 以对NaN正 せい 确操作 そうさ ,这是少 しょう 有 ゆう 的 てき 几个可 か 以对NaN像 ぞう 普通 ふつう 算 さん 术一样操作有效的函数之一。C99新 しん 增 ぞう 了 りょう copysign
函数 かんすう 。
−x:從 したがえ 涵義上 じょう 指 ゆび 將 しょう x的 てき 符號 ふごう 反轉 はんてん 。當 とう x是 ぜ ±0或 ある 者 もの NaN時 じ ,其涵義 ぎ 可能 かのう 不同 ふどう 於0-x.
scalb(y, N)
:計算 けいさん y ×2N (N是 ぜ 整数 せいすう ),无需再 さい 计算2N 。C99中 ちゅう 对应的 てき 函 はこ 式 しき 名 めい 是 ぜ scalbn
.
logb(x)
:計算 けいさん x = 1.a ×2n (x ≠ 0, a ∈[0, 1))中 ちゅう 的 てき n. C99新 しん 增 ぞう 了 りょう logb
和 わ ilogb
函 はこ 式 しき 。
nextafter(x,y)
:沿y方向 ほうこう 找最鄰近x的 てき 可 か 表 ひょう 達 たち 浮點數 すう 。比 ひ 如nextafter(0, 1)
得 え 到 いた 的 てき 是 ぜ 最小 さいしょう 可 か 表 ひょう 達 たち 的 てき 正數 せいすう 。C99新 しん 增 ぞう 了 りょう nextafter
函 はこ 式 しき 。
finite(x)
:判斷 はんだん x是 ぜ 否 ひ 有限 ゆうげん ,即 そく −Inf < x < Inf. C99新 しん 增 ぞう 了 りょう isfinite
函 はこ 式 しき 。
isnan(x)
:判斷 はんだん x是 ぜ 否 ひ 是 ぜ 一 いち 個 こ NaN,這等價 とうか 于"x ≠ x". C99新 しん 增 ぞう 了 りょう isnan
函 はこ 式 しき 。
x <> y
:僅當x < y或 ある 者 もの x > y時 とき 才 ざい 為 ため True,其涵義 ぎ 是 ぜ NOT(x = y)。注意 ちゅうい 這不同 どう 于"x ≠ y"。
unordered(x, y)
:當 とう x與 あずか y無法 むほう 比較 ひかく 大小 だいしょう 時 じ 為 ため True,比 ひ 如說x或 ある 者 もの y是 ぜ 一 いち 個 こ NaN. C99中 ちゅう 對應 たいおう 的 てき 函 はこ 式 しき 名 めい 是 ぜ isunordered
.
class(x)
:區分 くぶん x的 てき 浮點數 すう 類 るい 屬 ぞく :发信NaN、靜 しずか 默 だま NaN、-Inf、負 まけ 的 てき 規約 きやく 浮點數 すう ,負 まけ 的 てき 非 ひ 規約 きやく 浮點數 すう ,-0.0,0.0,正 せい 的 てき 非 ひ 規約 きやく 浮點數 すう ,正 せい 的 てき 規約 きやく 浮點數 すう ,Inf。
在 ざい 二 に 進 しん 制 せい ,第 だい 一 いち 個 こ 有效 ゆうこう 數字 すうじ 必定 ひつじょう 是 ぜ 「1」,因 いん 此這個 こ 「1」並 なみ 不 ふ 會 かい 儲 もうか 存 そん 。
單 たん 精 せい 和 わ 雙 そう 精 せい 浮點數 すう 的 てき 有效 ゆうこう 數字 すうじ 分別 ふんべつ 是 ぜ 有 ゆう 儲 もうか 存 そん 的 てき 23和 わ 52個 こ 位 い ,加 か 上 じょう 最 さい 左手 ひだりて 邊 べ 沒 ぼつ 有 ゆう 儲 もうか 存 そん 的 てき 第 だい 1個 いっこ 位 い ,即 そく 是 ぜ 24和 わ 53個 こ 位 い 。
log
2
24
=
7.22
{\displaystyle \log 2^{24}=7.22}
log
2
53
=
15.95
{\displaystyle \log 2^{53}=15.95}
由 よし 以上 いじょう 的 てき 計算 けいさん ,單 たん 精 せい 和 わ 雙 そう 精 せい 浮點數 すう 可 か 以保證 ほしょう 7位 い 和 わ 15位 い 十 じゅう 進 しん 制 せい 有效 ゆうこう 數字 すうじ 。
C++语言标准定 てい 义的浮点数 すう 的 てき 十 じゅう 进制精度 せいど (decimal precision):十 じゅう 进制数字 すうじ 的 てき 位 い 数 すう ,可 か 被 ひ (浮点数 すう )表示 ひょうじ 而值不 ふ 发生变化[ 3] 。C语言标准定 てい 义的浮点数 すう 的 てき 十 じゅう 进制精度 せいど 为:十 じゅう 进制数字 すうじ 的 てき 位 い 数 すう q,使 つかい 得 とく 任 にん 何 なん 具有 ぐゆう q位 くらい 十进制数字的浮点数可近似表示为b进制的 てき p位 くらい 数字 すうじ 并且能 のう 近似 きんじ 回 かい 十进制表示而不改变这q位 くらい 十 じゅう 进制数字 すうじ [ 4] 。
但 ただし 由 よし 于相对近似 きんじ 误差不 ふ 均 ひとし 匀,有 ゆう 的 てき 7位 い 十进制浮点数不能保证近似转化为32比 ひ 特 とく 浮点再 さい 近似 きんじ 转化回 かい 7位 い 十进制浮点后保持值不变:例 れい 如8.589973e9将 しょう 变成8.589974e9。这种近似 きんじ 误差不 ふ 会 かい 超 ちょう 过1比 ひ 特 とく 的 てき 表示 ひょうじ 能力 のうりょく ,因 いん 此(24-1)*std::log10(2)等 とう 于6.92,下取 したどり 整 せい 为6,成 なり 为std::numeric_limits<float>::digits10以及FLT_DIG的 てき 值。std::numeric_limits<float>::max_digits10的 てき 值为9,含义是 ぜ 必须9位 い 十进制数字才能区分float的 てき 所有 しょゆう 值;也即float的 てき 最大 さいだい 表示 ひょうじ 区分 くぶん 度 ど 。
类似的 てき ,std::numeric_limits<double>::digits10或 ある DBL_DIG是 ぜ 15, std::numeric_limits<double>::max_digits10是 ぜ 17。
以下 いか 的 てき C++ 程 ほど 式 しき ,概略 がいりゃく 地 ち 展示 てんじ 了 りょう 單 たん 精 せい 和 わ 雙 そう 精 せい 浮點數 すう 的 てき 精度 せいど 。
#include <iostream>
int main () {
std :: cout . precision ( 20 );
float a = 123.45678901234567890 ;
double b = 123.45678901234567890 ;
std :: cout << a << std :: endl ;
std :: cout << b << std :: endl ;
return 0 ;
}
// Xcode 5.1
// Output:
// 123.456787109375
// 123.45678901234568059
// Program ended with exit code: 0
^ Codes . [2007-04-30 ] . (原始 げんし 内容 ないよう 存 そん 档 于2006-09-23) (英 えい 语) .
^ 參 まいり 見 み 有 ゆう 符號 ふごう 數 すう 處理 しょり 的 てき Excess-N
^ 原文 げんぶん :Number of base 10 digits that can be represented without change
^ 原文 げんぶん :number of decimal digits, q, such that any floating-point number with q decimal digits can be rounded into a floating-point number with p radix b digits and back again without change to the q decimal digits.