次の方法で共有


float_control

関数に浮動小数点の動作を指定します。

float_control( value,setting [push] | push | pop )

Flags

  • value,setting**[push]**
    浮動小数点の動作を指定します。value は precise または except を指定できます。詳細については、「/fp (浮動小数点の動作の指定)」を参照してください。setting です on または off できます。

    value が precise 場合preciseexcept の設定が指定されています。exceptonpreciseon に設定をに設定するだけです。

    push のオプションのトークンを追加するとvalue の現在の設定がコンパイラの内部スタックにプッシュされます。

  • push
    コンパイラの内部スタックに設定して現在の float_control を押します。

  • pop
    コンパイラの内部スタックの最上位から設定する float_control を削除しfloat_control の新しいセットを作成します。

解説

except がオンの場合 float_control precise をからに変更することはできません。同様にprecise は fenv_access をオンにするとオフを切り替えることはできません。厳密なモデルから float_control のプラグマはモデルに移動するには次のコードを使用する :

#pragma float_control(except, off)
#pragma fenv_access(off)
#pragma float_control(precise, off)
// The following line is needed on Itanium processors
#pragma fp_contract(on)

高速モデルから float_control のプラグマの厳密なモデルに移動するには次のコードを使用する :

#pragma float_control(precise, on)
#pragma fenv_access(on)
#pragma float_control(except, on)
// The following line is needed on Itanium processors.
#pragma fp_contract(off)

他の浮動小数点プラグマは次のとおりです。:

使用例

次の例では float_control プラグマを使用してオーバーフローの浮動小数点例外をキャッチする方法を示します。

// pragma_directive_float_control.cpp
// compile with: /EHa
#include <stdio.h>
#include <float.h>

double func( ) {
   return 1.1e75;
}

#pragma float_control (except,on)

int main( ) {
   float u[1];
   unsigned int currentControl;
   errno_t err;

   err = _controlfp_s(&currentControl, ~_EM_OVERFLOW, _MCW_EM);
   if (err != 0)
      printf_s("_controlfp_s failed!\n");

   try  {
      u[0] = func();
      printf_s ("Fail");   
      return(1);
   } 
   
   catch (...)  {
      printf_s ("Pass");
      return(0);
   }
}
  

参照

関連項目

プラグマのディレクティブと __Pragma のキーワード