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

先頭へ戻る

ERANGE

概要 数学関数の値域エラーを表すエラーコード。
ヘッダ errno.h
形式 #define ERANGE 34
置換結果 0以外の何らかの整数。
詳細 数学関数の値域エラー(RANGE Error)を表し、errno に格納される値である。なお、「値域」は「ちいき」と読む)。
関数の数学的な結果の絶対値が大きすぎるため、指定の型で表現できないことを表す。結果の値が大きすぎる場合はオーバーフロー、小さすぎる場合はアンダーフローと呼ばれる。オーバーフローの場合は、C95以前、あるいは C99以降で「math_errhandling & MATH_ERRNO」が 0以外の場合に、errno に ERANGE を格納する。アンダーフローの場合に同様のことを行うかどうかは、処理系定義である。
注意
使用例
#include <stdio.h>
#include <math.h>
#include <errno.h>
#include <float.h>

int main(void)
{
    double x;

    errno = 0;
    x = pow( DBL_MAX, 2.0 );
    if( errno == ERANGE ){
        puts( "pow関数の結果が表現不可能" );
        return 0;
    }
    printf( "%f\n", x );

    return 0;
}

実行結果:

pow関数の結果が表現不可能
関連 標準には、他のエラーコードとして、EDOMEILSEQ が定義されている。
C99 では値域エラーの発生時に浮動小数点例外(FE_OVERFLOWFE_DIVBYZEROFE_UNDERFLOW)を発生させることがある。
解説章 第48章


参考リンク

更新履歴

'2018/4/22 解説中で C95 を(C89 に対して)特別扱いしないように修正。そもそもC言語編は C95ベースなので、余計な説明は省く。

'2018/4/21 「詳細」を書きなおした。

'2018/4/6 C99以降での errno の扱いについて追記。

'2018/1/22 新規作成。





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

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

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

Programming Place Plus のトップページへ


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