インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
インテルの IEEE 754-2008 2 進浮動小数点準拠ライブラリーは、IEEE 754-2008 標準の binary32 および binary64 の 2 進法浮動小数点変換形式で規定されているすべての演算を提供します。このライブラリーが正しく動作するには、インテル® Pentium® 4 プロセッサー以上、およびインテル® ストリーミング SIMD 拡張命令 2 (インテル® SSE2) 以上に対応したオペレーティング・システムが必要です。
このライブラリーは、IEEE 754-2008 標準の 2 進法浮動小数点演算で規定されている 4 つの丸め方向属性 (roundTiesToEven、roundTowardPositive、roundTowardNegative、roundTowardZero) をすべてサポートしています。追加の丸め方向属性 roundTiesToAway は、IEEE 754-2008 標準で規定されていないため、一部のみサポートしています。デフォルトの丸め方向属性は roundTiesToEven に設定されています。
また、このライブラリーでは、規定されているすべての例外 (無効な演算、ゼロ除算、オーバーフロー、アンダーフロー、不正確) もサポートしており、デフォルトの例外処理に従ってフラグを設定します。IEEE 754-2008 標準でオプションとして規定されている別の例外処理はサポートしていません。
bfp754.h ヘッダーファイルには、ライブラリー関数のプロトタイプが含まれています。利用可能な関数の一覧は、「関数一覧」を参照してください。このライブラリーを使用するには、リンカーオプション -lbfp754 と浮動小数点セマンティクス制御オプション -fp-model source -fp-model except も指定する必要があります。
libbfp754 ライブラリーに含まれる多くのルーチンは、互換マイクロプロセッサーよりもインテル製マイクロプロセッサーでより高度に最適化されます。
IEEE 754-2008 標準では、4 種類の演算が定義されています。
結果あり | 結果なし | |
---|---|---|
FP 例外のシグナル発信あり |
一般演算子 |
シグナル演算子 |
FP 例外のシグナル発信なし |
クワイエット演算子 |
非演算子 |
さらに、一般演算子は、浮動小数点オペランドの形式や結果の形式によっても区別されます。
同次一般演算子。浮動小数点オペランドと浮動小数点結果の形式が同じです。
formatOf 一般演算子。浮動小数点オペランドと浮動小数点結果の形式が異なります。
IEEE 754-2008 標準では、すべての formatOf 一般演算子の結果は、出力形式への変換前に精度が低下しないように計算されなければなりません。これは、多くのハードウェアとソフトウェアの実装とは異なる場合があります。
例えば、すべてのオペランドが binary64 形式で、出力形式が binary32 の場合、多くのハードウェアとソフトウェアの実装では、最初に中間結果を計算し、binary64 に丸めてから binary32 に変換します。この 2 度の丸めによって生成される結果は、IEEE 754-2008 標準で定義されている特定の丸めモードでの結果と異なります。例えば、x = 0x3ff0000010000000 = 1.000000000000000000000001_2、y = 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 |