IEEE 754
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/11/19 05:22 UTC 版)
文字列表現
この標準では、基本形式と「外部文字列」形式との間での変換機能を要求している[15]。十進数の文字形式との変換は全形式について要求されている。外部文字列形式に変換したものを元の内部の形式に再変換したとき、全く同じ数値にならなければならない。NaNのペイロードを保持するという要求はなく、外部文字列形式に変換し数値に再変換したとき、signaling NaN が quiet NaN になることはありうる。
内部二進形式の値を十進の外部文字列形式に変換する場合、以下の十進有効桁数(以上)にすれば再びそれを内部二進形式に戻した場合に元の内部表現の値を完全に回復することができる[16]。
- binary16 の場合、5桁
- binary32 の場合、9桁
- binary64 の場合、17桁
- binary128 の場合、36桁
これら以外の二進形式の場合、必要な桁数は次の式で計算できる。
- 1 + ceiling(p×log102)
ここで、 p はその二進形式の仮数のビット数で、例えば binary32 なら24ビットである。
なお、実装上の限界として、二進形式と外部文字列形式との間の変換で正しい丸め結果を保証できない場合がありうる。この標準では、最低でも上記の最小桁数より3桁多い桁数までは正しい丸めを保証せねばならず(shall)、桁数無制限に正しい丸めを保証すべきである(should)。
内部十進浮動小数点形式の場合には、外部文字列表現に於いて以下の桁数(以上)を使えば、それを再び読み込んで内部十進形式に戻した場合に、元の数値を完全に回復することができる。
- decimal32 の場合、7桁
- decimal64 の場合、16桁
- decimal128 の場合、34桁
この標準では、十進形式と外部文字列表現の間での変換はいかなる桁数であっても正しい丸めを保証せねばならない。
二進と十進の間で正しく丸めを行いつつ変換するアルゴリズムが議論されており[17]、評価されている[18]。
- ^ これは、異なる仕様を採用しているハードウェア上に実装する際のコストへの考慮のためである。
- ^ “Floating point (GNU Coreutils 9.0)”. www.gnu.org. 2020年4月10日閲覧。
- ^ たとえば「一幸, 首藤 (2003年6月15日). “厳密な浮動小数点演算セマンティクスのJava実行時コンパイラへの実装”. 情報処理学会論文誌. pp. 1570–1582. 2020年4月10日閲覧。」を見よ。
- ^ "FW: ISO/IEC/IEEE 60559 (IEEE Std 754-2008)" (Mailing list). 1 April 2011. 2012年4月10日閲覧。 ISO規格に採用されたことを知らせる電子メールの記録
- ^ “ISO/IEC/IEEE 60559:2011” (英語). ISO. 2020年4月10日閲覧。
- ^ この「正と負の2つがある無限」は、数学でいう拡大実数のそれに似ている。標準の検討段階では、射影幾何における無限遠点のように、符号無しのただひとつの「無限」だけがある「射影モード」も議論されたがそちらは採用されず、その議論において「アフィンモード」と呼ばれたものが、実施されたIEEE 754における「数」の「モデル」である。
- ^ インテル8087及びその後継のFPUにある80bitの拡張表現が処理中で使われた場合には、それによる2度の丸めで、結果が異なる場合がある。またしばしば言われる「0.1を10回足しても1にならない」といったような不正確さは、この規定に違反して起きるわけではない。
- ^ 制定に深く関与したカハンが指摘した「数表作成者のジレンマ」とは、このことを指している。
- ^ IEEE 754 2008, §3.7
- ^ IEEE 754 2008, §3.7 では「言語規格はサポートするそれぞれの基数について拡張可能精度をサポートする機構を定義すべきだ」としている。
- ^ IEEE 754 2008, §3.7 では、「言語規格または実装はサポートしている基数での最大幅の基本形式より高い精度の拡張形式をサポートすべきだ」としている。
- ^ “RE: Two technical questions on IEEE Std 754-2008”. 2014年2月23日時点のオリジナルよりアーカイブ。2012年4月10日閲覧。
- ^ IEEE 754 2008, Clause 9
- ^ IEEE 754 2008, §9.3
- ^ IEEE 754 2008, §9.4
- ^ IEEE 754 2008, §5.12
- ^ IEEE 754 2008, §5.12.2
- ^ Gay, David M. (November 30, 1990), Correctly rounded binary-decimal and decimal-binary conversions, Numerical Analysis Manuscript, Murry Hill, NJ, USA: AT&T Laboratories, 90-10
- ^ Paxson, Vern; Kahn, William (May 22, 1991), A Program for Testing IEEE Decimal–Binary Conversion, Manuscript 2012年3月28日閲覧。
- IEEE 754のページへのリンク