5.2 _controlfp()

float.h で定義される _controlfp() 関数は、Microsoft 製品との互換性を維持するために提供されています。この関数を使用して、例外のトラップと丸めモードを制御できます。

_controlfp() の関数プロトタイプは次のとおりです。
unsigned int _controlfp(unsigned int new, unsigned int mask);

この関数では、例外をサポートする浮動小数点モデルを選択する必要があります。例えば、--fpmode=ieee_full--fpmode=ieee_fixed です。
また、_controlfp() は、マスクを使用して制御ワードを修正し、修正するビットを切り離すことができます。mask のビットにゼロが設定されている場合、それに対応する制御ワードのビットは変更されません。mask のビットにゼロ以外の値が設定されている場合は、それに対応する制御ワードのビットに、new の対応するビットの値が設定されます。戻り値は、制御ワードの前の状態となります。

これは、マスクのワードにゼロを設定し、フラグのワードに 1 を設定することでビットを切り替えられる、__ieee_status() または __fp_status() の動作とは異なります。
以下の表は、_controlfp() への引数を作成する場合に使用できるマクロを示しています。

表 5-1 _controlfp の引数に使用されるマクロ

マクロ 説明
_MCW_EM すべての例外ビットを保持するマスクが生成されます。
_EM_INVALID 無効演算例外を示すビットが生成されます。
_EM_ZERODIVIDE ゼロによる除算例外を示すビットが生成されます。
_EM_OVERFLOW オーバーフロー例外を示すビットが生成されます。
_EM_UNDERFLOW アンダーフロー例外を示すビットが生成されます。
_EM_INEXACT 不正確結果例外を示すビットが生成されます。
_MCW_RC 丸めモードフィールドのマスクが生成されます。
_RC_CHOP ゼロへの丸めを示す丸めモードの値が生成されます。
_RC_UP 切り上げを示す丸めモードの値が生成されます。
_RC_DOWN 切り下げを示す丸めモードの値が生成されます。
_RC_NEAR 近似値への丸めを示す丸めモードの値が生成されます。

これらのマクロの値は、将来の ARM 製品のバージョンにおいても同じであるという保証はありません。将来のリリースで値が変更されてもコードが機能するように、値ではなくマクロを使用して下さい。
例えば、丸めモードを切り下げに設定するには、以下の関数を呼び出します。
_controlfp(_RC_DOWN, _MCW_RC);
無効演算例外のトラップを有効にし、他のすべての例外のトラップを無効にするには、以下のように記述します。
_controlfp(_EM_INVALID, _MCW_EM);
不正確結果例外のトラップを無効にするには、以下のように記述します。
_controlfp(0, _EM_INEXACT);
関連する概念
3.9 Microsoft 製品との互換性を維持するための浮動小数点関数
関連する参考文書
5.1 _clearfp()
5.8 _statusfp()
5.5 __ieee_status()
5.3 __fp_status()
非機密扱いPDF file icon PDF 版ARM DUI0475KJ
Copyright © 2010-2014 ARM.All rights reserved.