_clear87、_clearfp
更新 : 2007 年 11 月
浮動小数点ステータス ワードを取得し、クリアします。
unsigned int _clear87( void );
unsigned int _clearfp( void );
戻り値
返される値のビットは、_clear87 または _clearfp の呼び出し前の浮動小数点ステータスを示します。_clear87 で返されるビットの詳細な定義については、Float.h を参照してください。数値ライブラリ関数の多くは 8087/80287 ステータスを変更しますが、その結果は予想できません。浮動小数点ステータス ワードの状態がわかっている範囲で実行される浮動小数点演算が少ないほど、_clear87 と _status87 の戻り値の信頼性は高くなります。
解説
_clear87 関数は、浮動小数点ステータス ワードの例外フラグをクリアし、ビジー ビットを 0 に設定し、ステータス ワードを返します。浮動小数点ステータス ワードは、8087/80287 ステータス ワードと、8087/80287 例外ハンドラによって検出された浮動小数点スタック オーバーフローやアンダーフローなど、ほかの条件との組み合わせです。
_clearfp は、_clear87 ルーチンの移植性の高いバージョンで、プラットフォームに依存しません。Intel (x86) プラットフォームでは _clear87 と同じです。MIPS と ALPHA の各プラットフォームでもサポートされています。浮動小数点コードを MIPS または ALPHA に確実に移植するには、_clearfp を使用します。x86 プラットフォームだけを対象とする場合は、_clear87 または _clearfp のいずれかを使用します。
共通言語ランタイムは浮動小数点の既定の精度のみをサポートするので、/clr (共通言語ランタイムのコンパイル) または /clr:pure を使用してコンパイルする場合、これらの関数は使用しないでください。
必要条件
ルーチン |
必須ヘッダー |
---|---|
_clear87 |
<float.h> |
_clearfp |
<float.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
// crt_clear87.c
// compile with: /Od
// This program creates various floating-point
// problems, then uses _clear87 to report on these problems.
// Compile this program with Optimizations disabled (/Od).
// Otherwise the optimizer will remove the code associated with
// the unused floating-point values.
//
#include <stdio.h>
#include <float.h>
int main( void )
{
double a = 1e-40, b;
float x, y;
printf( "Status: %.4x - clear\n", _clear87() );
// Store into y is inexact and underflows:
y = a;
printf( "Status: %.4x - inexact, underflow\n", _clear87() );
// y is denormal:
b = y;
printf( "Status: %.4x - denormal\n", _clear87() );
}
Status: 0000 - clear
Status: 0003 - inexact, underflow
Status: 80000 - denormal
.NET Framework の相当するアイテム
適用できません。標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。