Oracle® Developer Studio 12.5: 数値計算ガイド

印刷ビューの終了

更新: 2016 年 6 月
 
 

5.2 SPARC との差異

Oracle Developer Studio コンパイラは通常、SPARC と x86 で同様に実行されるコードを生成します。ただし、x86 ベースシステムについては、次の重要な相違点に注意してください。

  • x87 浮動小数点レジスタは 80 ビット幅です。x87 浮動小数点レジスタスタックが使用されている場合、算術計算の中間結果が拡張倍精度 (80 ビット) になるため、計算結果が異なることがあります。–fstore フラグはこのような不一致を最小限に抑えます。ただし、–fstore フラグを使用するとパフォーマンスが低下します。Oracle Developer Studio 12.5 はデフォルトでは単精度および倍精度の式評価に x87 レジスタを使用しませんが、–xarch=386 が指定されている場合、x87 ハードウェア超越命令が使用されている場合、または拡張倍精度変数が使用されている場合には、x87 レジスタが使用されます。

  • 単精度または倍精度浮動小数点数が x87 浮動小数点レジスタスタックにロードされるか、メモリーに格納されるたびに、拡張倍精度 (80 ビット) に対する双方向の変換が行われます。このため、浮動小数点数のロードと格納によって例外が発生することがあります。–m32 を使用すると、浮動小数点サブルーチンのオペランドと結果は、x87 レジスタで渡されます。

  • x87 浮動小数点レジスタスタックが使用中の場合は、マイクロコードによって段階的アンダーフローがハードウェアに実装されます。非標準モードはありません。

  • fpversion ユーティリティーはありません。

  • 拡張倍精度 (80 ビット) 形式では、浮動小数点値を表現しない特定のビットパターンが認められています (表 8 を参照)。ハードウェアは通常、これらの「未サポート形式」をシグナルを発生する NaN として扱いますが、数学ライブラリではこのような表現の処理に一貫性がありません。これらのビットパターンはハードウェアによって生成されることはないため、配列の末尾を超えた読み取りなどの無効なメモリー参照、または C の union 構造体を介した、メモリー内のデータのある型から別の型への明示的な強制型変換が行われる場合のみ作成されます。このため、ほとんどの数値プログラムでは、これらのビットパターンは生じません。