(Translated by https://www.hiragana.jp/)
IEEE 754 - 维基百科,自由的百科全书 とべ转到内容ないよう

IEEE 754

本页使用了标题或全文手工转换
维基百科ひゃっか自由じゆうてき百科ひゃっかぜん

IEEE二進位浮點數算術標準IEEE 75420せい纪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) てき表示ひょうじ其實以這さま表示ひょうじ

也就浮點すうてき實際じっさいとう符號ふごう(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],其中てき为存储指すうてきもとてき长度。

以单精度せいど浮点すう为例,它的指数しすういき8个位もと固定こていへんうつり值是。此為ゆうごうすうてき表示ひょうじ方式ほうしき,单精度せいど浮点すうてき指数しすう部分ぶぶん实际取值是从-126いた127(-127128用作ようさく特殊とくしゅ值处,见下かた规约形式けいしきてき浮点すうかず特殊とくしゅ」)。れい如指すう实际值为ざい精度せいど浮点すうちゅうてき指数しすういき编码值为そく

さいよう指数しすうてき实际值加じょう固定こていてきへんうつり值的办法表示ひょうじ浮点すうてき指数しすうこう处是以用长度为个位もとてき无符ごう整数せいすうらい表示ひょうじ所有しょゆうてき指数しすう值,这使とく两个浮点すうてき指数しすう大小だいしょうてき较更为容易ようい,实际じょう以按あきら字典じてん次序じじょ较两个浮てん表示ひょうじてき大小だいしょう

这种うつり表示ひょうじてき指数しすう部分ぶぶんちゅうぶんしょうさく阶码

规约形式けいしきてき浮点すう

[编辑]

如果浮点すう中指なかゆびすう部分ぶぶんてき编码值在これあいだ,且在科學かがく表示法ひょうじほうてき表示ひょうじ方式ほうしき分數ぶんすう(fraction)部分ぶぶん最高さいこう有效ゆうこうそく整數せいすうこれ么這浮点すうはたしょうため规约形式けいしきてき浮点すう。“规约”ゆびようただ一确定的浮点形式去表示一个值。

よし于这种表示ひょうじてきすうゆう一位隐含的二进制有效数字,为了あずか进制科学かがく计数ほうてきすう(mantissa)しょう别,IEEE754しょう有效ゆうこうすう(significant)。

舉例らいせつそう精度せいど (64-bit) てき規約きやく形式けいしき浮點すうざい指數しすうへんうつり值的值域ため (11-bit) いたざい分數ぶんすう部分ぶぶんそくいた (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)はただい于相邻的小浮こおけ点数てんすう间的距离。れい如单精度せいど浮点すうてき绝对值最小さいしょうてき规约浮点すう,它与绝对值次しょうてき规约浮点すう间的距离为。如果さいよう渐进しき溢出,么绝对值最小さいしょうてき规约浮点すうあずか0てき距离しょう邻的小浮こおけ点数てんすう间距离的ばい以说非常ひじょう突然とつぜんてき溢出いた0。这种じょう况的一种糟糕后果是:两个不等ふとうてき小浮こおけ点数てんすうXあずかYあい减,结果はた0。训练ゆう素的すてきすう分析ぶんせきじん员可能会のうかい适应这种げんせいじょう况,ただし对于普通ふつうてきほどじょ员就很容易よういおちいにゅう错误りょうさいようりょう渐进しき溢出きさきはたかい现这种情况。れい如对于单精度せいど浮点すう指数しすう部分ぶぶん实际最小さいしょう值是(-126),对应てきすう部分ぶぶん, いちちょくいた, あい邻两小浮こおけ点数てんすう间的距离(gap)みやこただし;而与0最近さいきんてき浮点すうそく最小さいしょうてき规约すう)也是

特殊とくしゅ

[编辑]

這里ゆう三個特殊值需要指出:

  1. 如果指數しすう0并且尾かつおすうてき小數しょうすう部分ぶぶん0,這個すう±0(符號ふごう相關そうかん
  2. 如果指數しすう = 且尾かつおすうてき小數しょうすう部分ぶぶん0,這個すう±同樣どうよう符號ふごう相關そうかん
  3. 如果指數しすう = 且尾かつおすうてき小數しょうすう部分ぶぶん0,這個數表示すうひょうじためかず(NaN)

以上いじょう規則きそくそうゆい如下:

形式けいしき 指數しすう 小數しょうすう部分ぶぶん
れい 0 0
正規せいき形式けいしき 0 だい于0しょう于1
正規せいき形式けいしき いた だい于等于1しょう于2
無窮むきゅう 0
NaN 0

32單精度たんせいど

[编辑]

單精度たんせいどしんせい小數しょうすう使用しよう32もとそんもうか

とく长度:1823
名称めいしょうSExpFraction
とく编号:3130いたり23
へんせい值(實際じっさいてき指數しすう大小だいしょう+127)
22いたり0へんごうしたがえ右邊うへん開始かいしため0)

Sため符號ふごう,Expため指數しすう,Fractionため有效ゆうこうすう指數しすう部分ぶぶんそく使用しよう所謂いわゆるてきへんせい形式けいしき表示ひょうじへんせい值為實際じっさいてき指數しすう大小だいしょう與一よいち固定こてい值(32てき情況じょうきょう127)てきさいよう這種方式ほうしき表示ひょうじてき目的もくてき簡化比較ひかくよしため指數しすうてき可能かのうため正也まさや可能かのうためまけ,如果さいよう補數ほすう表示ひょうじてきばなし全體ぜんたい符號ふごうSExp自身じしんてき符號ふごうはたしるべ不能ふのう簡單かんたんてき進行しんこう大小だいしょう比較ひかく正因まさよりため如此,指數しすう部分ぶぶん通常つうじょうさいよう一個無符號的正數值存儲。單精度たんせいどてき指數しすう部分ぶぶん−126~+127じょうへんうつり值127,指數しすう值的大小だいしょうしたがえ1~254(0255特殊とくしゅ值)。浮點小數しょうすう計算けいさん指數しすう值減へんせい值將實際じっさいてき指數しすう大小だいしょう

精度せいど浮点すうかく种极值情况:

类别 せい负号 实际指数しすう ゆうへんうつり指数しすう 指数しすういき すういき かず
れい 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そう精度せいど

[编辑]

そう精度せいどしんせい小數しょうすう使用しよう64もとそんもうか

とく长度:11152
名称めいしょうSExpFraction
とく编号:6362いたり52
へんせい值(實際じっさいてき指數しすう大小だいしょう+1023)
51いたり0へんごうしたがえ右邊うへん開始かいしため0)

Sため符號ふごう,Expため指數しすう,Fractionため有效ゆうこうすう指數しすう部分ぶぶんそく使用しよう所謂いわゆるてきへんせい值形しき表示ひょうじへんせい值為實際じっさいてき指數しすう大小だいしょう與一よいち固定こてい值(64てき情況じょうきょう1023)てきさいよう這種方式ほうしき表示ひょうじてき目的もくてき簡化比較ひかくよしため指數しすうてき可能かのうため正也まさや可能かのうためまけ,如果さいよう補數ほすう表示ひょうじてきばなし全體ぜんたい符號ふごうSExp自身じしんてき符號ふごうはたしるべ不能ふのう簡單かんたんてき進行しんこう大小だいしょう比較ひかく正因まさよりため如此,指數しすう部分ぶぶん通常つうじょうさいよう一個無符號的正數值存儲。そう精度せいどてき指數しすう部分ぶぶん−1022~+1023じょう1023,指數しすう值的大小だいしょうしたがえ1~2046(0(2しんぜんため0)2047(2しんぜんため1)特殊とくしゅ值)。浮點小數しょうすう計算けいさん指數しすう值減へんせい值將實際じっさいてき指數しすう大小だいしょう

浮點すうてき比較ひかく

[编辑]

浮点すう基本きほんじょう以按あきら符号ふごう指数しすういきすういきてき顺序さく字典じてん较。显然,所有しょゆう正数せいすうだい于负すうせい负号しょうどう时,指数しすうてき二进制表示法更大的其浮点数值更大。

浮點すうてき捨入

[编辑]

にんなん有效ゆうこうすうじょうてき運算うんざん結果けっか通常つうじょうそんざい較長てき暫存ちゅうとう結果けっかかい浮點格式かくしき必須ひっすはた出來できてきもと丟棄。 ゆう多種たしゅ方法ほうほう以用らい執行しっこう捨入作業さぎょう實際じっさいじょうIEEE標準ひょうじゅんれつ4しゅ不同ふどうてき方法ほうほう

  • 捨入いたさい接近せっきんしゃいれいたさい接近せっきんざい一样接近的情况下偶数优先(Ties To Even,这是だま认的しゃ入方いりがたしき):かいはた结果しゃにゅう为最接近せっきん且可以表示ひょうじてき值,ただしとう存在そんざい两个すう一样接近的时候,则取其中てき偶数ぐうすうざい二进制中是以0结尾てき)。
  • あさ+∞方向ほうこう捨入かいはた結果けっかあさただし無限むげんだいてき方向ほうこう捨入。
  • あさ-∞方向ほうこう捨入かいはた結果けっかあさ無限むげんだいてき方向ほうこう捨入。
  • あさ0方向ほうこう捨入かいはた結果けっかあさ0てき方向ほうこう捨入。

浮点すうてき运算あずか函数かんすう

[编辑]

标准运算

[编辑]

しもじゅつ函数かんすう必须提供ていきょう:

  • 乘除じょうじょ(Add、subtract、multiply、divide)。ざい减运さんちゅうまけれいあずかれい相等そうとう
  • 平方根へいほうこん(Square root):,另規定きてい
  • 浮点あまりすうかえしかい
  • 近似きんじいた最近さいきんてき整数せいすう。如果恰好かっこうざい两个しょう邻整すう间,则近似きんじいた偶数ぐうすう
  • 较运さん. -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しんぞうりょうlogbilogbはこしき
  • 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」なみかいもうかそん

讨论いち

[编辑]

たんせいそうせい浮點すうてき有效ゆうこう數字すうじ分別ふんべつゆうもうかそんてき2352じょうさい左手ひだりてぼつゆうもうかそんてきだい1個いっこそく2453

よし以上いじょうてき計算けいさんたんせいそうせい浮點すう保證ほしょう715じゅうしんせい有效ゆうこう數字すうじ

讨论

[编辑]

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_DIG15, std::numeric_limits<double>::max_digits1017。

れい

[编辑]

以下いかてき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

相關そうかん條目じょうもく

[编辑]

外部がいぶ連結れんけつ

[编辑]

參考さんこう文獻ぶんけん

[编辑]
  1. ^ Codes. [2007-04-30]. (原始げんし内容ないようそん于2006-09-23) えい语). 
  2. ^ まいりゆう符號ふごうすう處理しょりてきExcess-N
  3. ^ 原文げんぶん:Number of base 10 digits that can be represented without change
  4. ^ 原文げんぶん: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.