インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

概要: インテルの IEEE 754-2008 2 進浮動小数点準拠ライブラリー

インテルの IEEE 754-2008 2 進浮動小数点準拠ライブラリーは、IEEE 754-2008 標準の binary32 および binary64 の 2 進法浮動小数点変換形式で規定されているすべての演算を提供します。このライブラリーが正しく動作するには、インテル® Pentium® 4 プロセッサー以上、およびインテル® ストリーミング SIMD 拡張命令 2 (インテル® SSE2) 以上に対応したオペレーティング・システムが必要です。

このライブラリーは、IEEE 754-2008 標準の 2 進法浮動小数点演算で規定されている 4 つの丸め方向属性 (roundTiesToEvenroundTowardPositiveroundTowardNegativeroundTowardZero) をすべてサポートしています。追加の丸め方向属性 roundTiesToAway は、IEEE 754-2008 標準で規定されていないため、一部のみサポートしています。デフォルトの丸め方向属性は roundTiesToEven に設定されています。

また、このライブラリーでは、規定されているすべての例外 (無効な演算、ゼロ除算、オーバーフロー、アンダーフロー、不正確) もサポートしており、デフォルトの例外処理に従ってフラグを設定します。IEEE 754-2008 標準でオプションとして規定されている別の例外処理はサポートしていません。

bfp754.h ヘッダーファイルには、ライブラリー関数のプロトタイプが含まれています。利用可能な関数の一覧は、「関数一覧」を参照してください。このライブラリーを使用するには、リンカーオプション -lbfp754 と浮動小数点セマンティクス制御オプション -fp-model source -fp-model except も指定する必要があります。

libbfp754 ライブラリーに含まれる多くのルーチンは、互換マイクロプロセッサーよりもインテル製マイクロプロセッサーでより高度に最適化されます。

演算

IEEE 754-2008 標準では、4 種類の演算が定義されています。

  1. 一般演算子。結果として正しく丸められた浮動小数点値または整数値を生成します。この演算は、浮動小数点例外をシグナル発信することがあります。
  2. クワイエット演算子。結果として浮動小数点値を生成します。この演算は、浮動小数点例外をシグナル発信することはありません。
  3. シグナル演算子。結果として浮動小数点値を生成しません。この演算は、浮動小数点例外をシグナル発信することがあります。
  4. 非演算子。結果として浮動小数点値を生成しません。この演算は、浮動小数点例外をシグナル発信することはありません。

  結果あり 結果なし

FP 例外のシグナル発信あり

一般演算子

シグナル演算子

FP 例外のシグナル発信なし

クワイエット演算子

非演算子

さらに、一般演算子は、浮動小数点オペランドの形式や結果の形式によっても区別されます。

  1. 同次一般演算子。浮動小数点オペランドと浮動小数点結果の形式が同じです。

  2. formatOf 一般演算子。浮動小数点オペランドと浮動小数点結果の形式が異なります。

    IEEE 754-2008 標準では、すべての formatOf 一般演算子の結果は、出力形式への変換前に精度が低下しないように計算されなければなりません。これは、多くのハードウェアとソフトウェアの実装とは異なる場合があります。

    例えば、すべてのオペランドが binary64 形式で、出力形式が binary32 の場合、多くのハードウェアとソフトウェアの実装では、最初に中間結果を計算し、binary64 に丸めてから binary32 に変換します。この 2 度の丸めによって生成される結果は、IEEE 754-2008 標準で定義されている特定の丸めモードでの結果と異なります。例えば、x = 0x3ff0000010000000 = 1.000000000000000000000001_2y = 0x3ca0000000000000 = 1.0_2*2^(-53) x+y = 1.00000000000000000000000100000000000000000000000000001_2 とします。

    丸め方向属性が roundTiesToEven の場合、2 度の丸めによって生成される結果は、最初の binary64 形式への丸めで 1.000000000000000000000001_2 (0x3ff0000010000000) となり、次の binary32 形式への丸めで 1 (0x3f800000) となります。一方、IEEE 754-2008 標準の結果は binary32 形式への丸めで 1.00000000000000000000001_2 (0x3f800001) となります。

データ型

次の表は、IEEE 754-2008 標準の形式の名前と定義、およびこのライブラリーで使用されている対応する C99 のデータ型を示します。

形式名

定義

C99 のデータ型

binary32

IEEE 754-2008 の binary32 変換形式

float

binary64

IEEE 754-2008 の binary64 変換形式

double

int

整数オペランドの形式

int、unsigned int、long long int、unsigned long long int

int32

符号付き 32 ビット整数

int

uint32

符号なし 32 ビット整数

unsigned int

int64

符号付き 64 ビット整数

long long int

uint64

符号なし 64 ビット整数

unsigned long long int

boolean

一般的な整数型で表現されるブール値

int

enum

浮動小数点クラスの列挙値

int

浮動小数点基数の列挙値

int

logBFormat

logB 演算の結果と scaleB 演算のスケール指数オペランドの型

int

decimalCharacterSequence

10 進文字列

char*

hexCharacterSequence

16 進仮数部文字列

exceptionGroup

ブール値で表された例外のセット

int

flags

ステータスフラグのセット

int

binaryRoundingDirection

2 進丸め方向

int

modeGroup

動的に指定可能なモード

int

void

明示的なオペランドまたは結果なし

void

関連情報