名前空間
変種
操作

isnan

提供: cppreference.com
< c‎ | numeric‎ | math
 
 
 
一般的な数学関数
関数
基本操作
(C99)
(C99)
(C99)
(C99)
(C99)
(C99)(C99)(C99)
指数関数
(C99)
(C99)
(C99)
(C99)
冪関数
(C99)
(C99)
三角関数と双曲線関数
(C99)
(C99)
(C99)
誤差関数とガンマ関数
(C99)
(C99)
(C99)
(C99)
最も近い整数
(C99)(C99)(C99)
(C99)
(C99)(C99)(C99)
浮動小数点操作関数
(C99)(C99)
(C99)
(C99)
分類
(C99)
isnan
(C99)
(C99)
(C99)(C99)
マクロ定数
 
ヘッダ <math.h> で定義
#define isnan(arg) /* implementation defined */
(C99およびそれ以降)

指定された浮動小数点数 arg が非数 (NaN) 値かどうか調べます。 このマクロは整数値を返します。

FLT_EVAL_METHOD は無視されます。 引数がその型よりも広い範囲や高い精度で評価されたとしても、まずその意味論上の型に変換され、それを元に分類されます (これは評価型が NaN をサポートするけれども意味論上の型はそうでない場合にのみ意味を持ちます)。

目次

[編集] 引数

arg - 浮動小数点値

[編集] 戻り値

arg が NaN の場合は非ゼロの整数値、そうでなければ 0

[編集] ノート

異なる符号ビットとペイロードを持つ多くの異なる NaN 値があります。 nan を参照してください。

NaN 値は自分自身や他の NaN 値と比較して等しくなることはありません。 NaN のコピーはそのビットパターンを変えるかもしれません。

浮動小数点値が NaN かどうか調べるもうひとつの方法は、それ自身と比較することです。 bool is_nan(double x) { return x != x; }

[編集]

#include <stdio.h>
#include <math.h>
#include <float.h>
 
int main(void)
{
    printf("isnan(NAN)         = %d\n", isnan(NAN));
    printf("isnan(INFINITY)    = %d\n", isnan(INFINITY));
    printf("isnan(0.0)         = %d\n", isnan(0.0));
    printf("isnan(DBL_MIN/2.0) = %d\n", isnan(DBL_MIN/2.0));
    printf("isnan(0.0 / 0.0)   = %d\n", isnan(0.0/0.0));
    printf("isnan(Inf - Inf)   = %d\n", isnan(INFINITY - INFINITY));
}

出力例:

isnan(NAN)         = 1
isnan(INFINITY)    = 0
isnan(0.0)         = 0
isnan(DBL_MIN/2.0) = 0
isnan(0.0 / 0.0)   = 1
isnan(Inf - Inf)   = 1

[編集] 参考文献

  • C11 standard (ISO/IEC 9899:2011):
  • 7.12.3.4 The isnan macro (p: 236-237)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.12.3.4 The isnan macro (p: 217)

[編集] 関連項目

(C99)(C99)(C99)
NaN (非数) を返します
(関数) [edit]
指定された浮動小数点値を分類します
(関数) [edit]
指定された数値が有限値かどうか調べます
(関数) [edit]
(C99)
指定された数値が無限大かどうか調べます
(関数) [edit]
指定された数値が正規化数かどうか調べます
(関数) [edit]
2つの浮動小数点が順序付けできないかどうか調べます
(関数) [edit]