FE_UNDERFLOW | Programming Place Plus C言語編 標準ライブラリのリファレンス

C言語編 標準ライブラリのリファレンス FE_UNDERFLOW

先頭へ戻る

FE_UNDERFLOW

概要 浮動小数点の演算結果が、表現可能な精度を下回るほど小さいことを表す浮動小数点例外
ヘッダ fenv.h
形式 #define FE_UNDERFLOW 0x00000002
置換結果 ほかの浮動小数点例外を表すマクロの置換結果とは異なる整数型の定数式。これらのマクロ同士でビット論理和を取ることができる。
詳細 浮動小数点演算の結果が、0 ではないが、表現可能な最小の精度よりも小さい値になったときに起こる浮動小数点例外。いわゆるアンダーフローである。
標準ライブラリの数学関数においては、「math_errhandling & MATH_ERREXCEPT」が 0以外になる環境でのみ、アンダーフローが発生したときに、この浮動小数点例外を起こす可能性がある(処理系定義である)。
浮動小数点例外が起きると、対応する浮動小数点状態フラグをセットする。浮動小数点状態フラグを判定する際に、fetestexcept関数を使うが、その実引数にこのマクロを使用できる。
注意 このマクロは、処理系がこの浮動小数点例外をサポートしない場合には定義されない。
浮動小数点例外を使用する場合、標準プラグマ FENV_ACCESS の状態を ON にしておかなければならない。状態が OFF の場合の動作は未定義である。VisualStudio 2015/2017 の場合、この標準プラグマが存在しておらず、代わりに #pragma fenv_access を用いる。
使用例
#include <fenv.h>
#include <stdio.h>

#if defined(_MSC_VER)
#pragma fenv_access (on)
#else
#pragma STDC FENV_ACCESS ON
#endif

int main(void)
{
    feclearexcept( FE_ALL_EXCEPT );
    for( double x = 1.0; x != 0.0; x /= 2.0 ){
        x /= 2.0;
        if( fetestexcept(FE_UNDERFLOW) ){
            puts( "FE_UNDERFLOW" );
            break;
        }
    }

    return 0;
}

実行結果

FE_UNDERFLOW
関連 標準で定義されている浮動小数点例外にはほかに、FE_DIVBYZEROFE_INEXACTFE_INVALIDFE_OVERFLOW がある。また、処理系が定義するすべての浮動小数点例外をビット論理和で結合した FE_ALL_EXCEPT がある。
解説章 第48章


参考リンク



更新履歴

'2018/4/23 新規作成。



標準ライブラリのリファレンス(名前順)のトップページへ

標準ライブラリのリファレンス(ヘッダ別)のトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ


このエントリーをはてなブックマークに追加
rss1.0 取得ボタン RSS