BohYoh.comトップページへ  FP_CONTRACT
C言語 標準ライブラリ アルファベット順索引 ヘッダ別索引 ホームページへ C言語講座のページ

C89  C99  C11  式短縮の許可性(プラグマ)
FP_CONTRACT
ヘッダ #include <math.h>
形式 #pragma STDC FP_CONTRACT 状態切替え指定
概 要  本プラグマは、式を短縮することを処理系が認める(状態が“オン”の場合)、あるいは、認めない(状態が“オフ”の場合)ことを切りかえるために用いる。
 本プラグマは、外部宣言の外側か、あるいは複合文の中のすべての明示的な宣言及び文の前で利用可能である。外部宣言の外側で用いる場合、本プラグマは、それが出現した時点から、他のFP_CONTRACTプラグマが出現するまで、あるいは翻訳単位の終わりまで有効となる。複合文の内側で用いる場合、本プラグマは、それが出現した時点から他のFP_CONTRACTプラグマが出現するまで(入れ子になった複合文も含む)、あるいはその複合文の最後まで有効となる。複合文の終わりでは、このプラグマに対する状態は、その複合文に入る直前の状態に戻る。このプラグマをこれら以外の文脈で使った場合の動作は定義されない。
 本プラグマに対する既定の状態(“オン”又は“オフ”)は処理系定義である。
補 足 状態切替え指定には、以下のいずれかを指定する。
  • ON
  • OFF
  • DEFAULT
 浮動小数点型の式は、短縮(contract)してもよいことになっている。短縮される場合、ハードウェアによる不可分な操作として評価され、ソースコードの記述及び式の評価方法どおりなら生じるはずの丸め誤差が省かれる可能性がある。また、短縮式では浮動小数点例外の発生が省略される可能性もある。
 本プラグマがない場合に、式が短縮されるかどうか、さらに、それをどのように短縮するかは、処理系定義である。これは、複数のCの演算子を結合させた高速な計算機命令の使用を許可することを明確に意図しているものである。式の短縮は、予測可能性を損なうおそれがあり、計算結果の正確さを低下させるおそれすらある。したがって、短縮式を処理系が使用するに当たっては、仕様をよく定義し、明確に文書化する必要がある。


BohYoh.comトップページへ