IEEE 754-2008 (以前はIEEE 754rとして知られていた) は、浮動小数点演算に関するIEEE 754規格の改訂版です。2008 年 8 月に発行され、IEEE 754-1985規格を大幅に改訂し、置き換えています。2008 年改訂版では、必要に応じて以前の規格を拡張し、10 進数演算とフォーマットを追加し、元の規格で未定義のままだった特定の領域を厳密にし、IEEE 854 (基数に依存しない浮動小数点規格) を統合しました。バイナリ浮動小数点演算のより厳密な定義が既存の実装とパフォーマンス的に互換性がない可能性があるいくつかのケースでは、それらはオプションになりました。2019 年にマイナー改訂版IEEE 754-2019で更新されました。[ 1 ]
この規格は2000年から改訂作業が進められており、2006年12月を目標完了日としていた。IEEE規格の改訂は、概ね以下の3つの段階を経て行われる。
2008年6月11日、IEEE改訂委員会(RevCom)により満場一致で承認され、同年6月12日にはIEEE-SA標準化委員会により正式に承認された。そして、2008年8月29日に発行された。
標準規格の策定への参加は、浮動小数点演算に関する確かな知識を持つ人々に開かれていた。シリコンバレーで開催された月例会議には90人以上が少なくとも1回は出席し、メーリングリストを通じてさらに多くの人々が参加した。
進捗が遅い場合もあり、議長は2005年9月15日の会議[ 2 ]で「進展が見られないため、追って通知があるまでこれらの会議を中断する」と宣言した。2005年12月、委員会は2006年12月を目標完了日とする新規則の下で再編成された。
2006年2月に新たな方針と手順が採択されました。2006年9月には、作業草案が承認され、編集のため親組織であるIEEEマイクロプロセッサ標準化委員会(MSC)に送付され、その後、スポンサー投票にかけられることになりました。
MSCに提出された草案の最終版であるバージョン1.2.5は、2006年10月4日付であった。[ 3 ] MSCは2006年10月9日に草案を承認した。草案は投票プロセス中に詳細において大幅に変更された。
最初のスポンサー投票は2006年11月29日から2006年12月28日まで行われました。投票機関の84名のメンバーのうち、85.7%が回答し、78.6%が賛成票を投じました。反対票(および400件を超えるコメント)があったため、2007年3月に再投票が行われ、84%の賛成を得ました。この投票で十分なコメント(130件以上)が寄せられたため、2007年4月中旬に開始された2回目の15日間の再投票に向けて、3番目の草案が作成されました。技術的な理由により、投票プロセスは2007年10月に4回目の投票で再開されました。また、650人の投票者からのコメントとスポンサー(IEEE MSC)からの要請により、草案に大幅な変更が加えられました。この投票は、必要な75%の賛成にわずかに届きませんでした。第 5 回の投票では、回答率が 98.0%、承認率が 91.0% で、寄せられたコメントは比較的小さな変更にとどまりました。第 6 回、第 7 回、第 8 回の投票では、承認率が 90% を超え、各ドラフトに対するコメントは徐々に減少しました。第 8 回(対象となるコメントはなく、9 件のコメントは以前のコメントの繰り返しで、1 件のコメントはドラフトに含まれていない内容に関するものでした)は、IEEE 標準として承認されるために IEEE 標準改訂委員会 (RevCom) に提出されました。
IEEE規格改訂委員会(RevCom)は、2008年6月の会議においてIEEE 754r草案を検討し、全会一致で承認しました。この草案は、2008年6月12日にIEEE-SA規格委員会によって承認されました。最終編集が完了し、文書は現在、出版のためにIEEE規格出版部に送付されています。
新しいIEEE 754(正式にはIEEE Std 754-2008、浮動小数点演算のIEEE標準)は、2008年8月29日にIEEEコンピュータソサエティによって発行され、IEEE Xploreウェブサイトから入手可能です[ 4 ]。
この規格はIEEE 754-1985に取って代わるものです。基数独立浮動小数点規格であるIEEE 854は、2008年12月に廃止されました。
この規格の最も明白な改良点は、16ビットおよび128ビットの2進数型と3種類の10進数型の追加、いくつかの新しい演算、そして多くの推奨関数の追加です。しかし、全体を通して用語の明確化も大幅に行われています。この概要では、規格の主要な各条項における主な変更点を概説します。
(規格のスポンサーによって決定された)適用範囲は、10進数形式と算術演算を含むように拡大され、拡張可能な形式も追加されました。
定義の多くは、明確化と一貫性のために書き直されました。いくつかの用語は、分かりやすさのために名称が変更されました(例えば、「非正規化」は「サブノーマル」に名称変更されました)。
フォーマットの説明はより体系化され、算術演算が可能な算術フォーマットと、標準的な符号化方式を持つ交換フォーマットが区別されるようになった。規格への準拠は、これらの用語に基づいて定義される。
浮動小数点形式の仕様レベルを列挙することで、以下の違いを明確にします。
次に、表現可能なエンティティの集合について詳細に説明し、仮数を分数または整数のいずれとしても扱うことができることを示します。基本フォーマットと呼ばれる特定の集合を定義し、バイナリ形式と10進形式の相互変換に使用されるエンコーディングについて説明します。
バイナリ交換フォーマットには、「半精度」(16ビット格納フォーマット)と「四倍精度」(128ビットフォーマット)が追加され、さらに一部の広帯域フォーマット用の一般化された式も含まれています。基本フォーマットには、32ビット、64ビット、および128ビットのエンコーディングがあります。
32~128ビットのバイナリ形式の長さに一致する、3つの新しい10進形式について説明します。これらは、7、16、および34桁の仮数部を持つ10進交換形式を提供し、仮数は正規化されている場合と正規化されていない場合があります。最大範囲と精度を実現するために、これらの形式では指数部と仮数部の一部を結合フィールドにマージし、残りの仮数部を10進整数エンコーディング(BCDの圧縮形式である高密度パック10進数(DPD)を使用)または従来のバイナリ整数エンコーディングを使用して圧縮します。基本形式は、64ビットと128ビットのエンコーディングを持つ2つの大きなサイズです。他のいくつかの交換形式についても、一般化された式が指定されています。
拡張形式および拡張可能形式により、他の精度および範囲での算術演算が可能になります。
この条項は、浮動小数点演算を制御するための静的属性の使用を推奨し、(必須の丸め属性に加えて)代替例外処理、中間結果の拡大、値変更最適化、および再現性を可能にするように変更されました。
最も近い値に丸める(ゼロ以外の値に丸める)属性が追加されました(小数演算の場合のみ必要です)。
このセクションでは、多くの説明(特に比較の分野)が行われており、以前は推奨されていたいくつかの操作(コピー、否定、絶対値、クラスなど)が必須となっています。
新しい操作には、融合乗算加算(FMA)、明示的な変換、分類述語(isNan( x ) など)、さまざまな最小値および最大値関数、全順序付け述語、および 2 つの小数固有の操作(samequantum および quantize)が含まれます。
最小値と最大値の演算は定義されていますが、入力値が等しいが表現方法が異なる場合のために、ある程度の余裕を持たせています。具体的には、次のようになります。
min(+0,−0)または、min(−0,+0)値がゼロのものを生成しなければならないが、常に最初の引数を返すことができる。NaN入力を端点のいずれかで静かに置き換える必要があるウィンドウ処理などの操作をサポートするために、minとmaxは、静かなNaNよりも優先して数値xを選択するように定義されています。
min(x,qNaN) = min(qNaN,x) = xmax(x,qNaN) = max(qNaN,x) = xこれらの関数は、数値を優先し、静穏なNaNを優先することを示すために、 minNumとmaxNumと呼ばれています。ただし、信号となるNaNが入力された場合は、通常の操作と同様に静穏なNaNが返されます。規格の公開後、これらの規則によってこれらの操作が非結合的になることが指摘されたため、IEEE 754-2019では新しい操作に置き換えられました。
Java、C#、PL/I、COBOL、Python、REXXなどで使用されているものと互換性のある10進数演算も、このセクションで定義されています。一般的に、10進数演算は2進数演算と同じ規則(結果は正しく丸められるなど)に従いますが、結果の指数を定義する追加の規則があります(多くの場合、指数が複数になることがあります)。
854とは異なり、754-2008では、フォーマットによって決まる範囲内で、10進数と2進数の浮動小数点数間の基数変換を正しく丸める必要があります。
この条項は改訂および明確化されましたが、大きな追加事項はありません。特に、シグナリング/静止NaN状態のエンコードに関する正式な推奨事項が示されています。
この条項は改訂され、大幅に明確化されたが、大きな追加事項はない。
この条項は、以前の第8項(「トラップ」)から拡張され、トラップやtry/catchなどの様々な形式のオプションの例外処理を可能にするものです。トラップやその他の例外処理メカニズムは、IEEE 754-1985と同様にオプションのままです。
この条項は新しいもので、言語標準で定義すべき50種類の演算(対数、べき乗、三角関数など)を推奨しています。これらはすべてオプションであり(標準に準拠するために必須ではありません)、属性の動的モードに関する演算や、縮約演算(合計、スケーリング積など)も含まれています。
この条項は新しいもので、言語標準において一連の操作の意味をどのように規定すべきかを提言し、文字通りの意味と結果の値を変更する最適化の微妙な違いを指摘している。
この条項は新しいもので、言語標準は再現可能なプログラム(つまり、言語のすべての実装において同じ結果を生成するプログラム)を作成するための手段を提供すべきであると推奨し、再現可能な結果を得るために必要なことを説明しています。
この付録は新しく追加されたもので、役立つ参考文献がいくつか掲載されています。
この付録は新規のものであり、浮動小数点コードのデバッグをサポートするために必要とされる機能について、デバッガ開発者向けのガイダンスを提供するものです。
これは新しい索引で、規格に記載されているすべての操作(必須またはオプション)を一覧表示します。
CPUの設計と開発の変化により、2008年のIEEE浮動小数点規格は、それが置き換えた1985年の規格と同様に、歴史的あるいは時代遅れと見なされる可能性がある。標準化プロセスでは取り上げられなかった多くの外部議論や項目があったが、以下は一般に知られるようになった項目である。