Namespaces
Variants

nan, nanf, nanl, nand32, nand64, nand128

From cppreference.net
< c ‎ | numeric ‎ | math
Common mathematical functions
Functions
Basic operations
(C99)
(C99)
(C99)
nan nanf nanl nand N
(C99) (C99) (C99) (C23)
Maximum/minimum operations
Exponential functions
Power functions
Trigonometric and hyperbolic functions
Nearest integer floating-point
(C99) (C99) (C99)
(C23) (C23) (C23) (C23)
Floating-point manipulation
Narrowing operations
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
Quantum and quantum exponent
Decimal re-encoding functions
Total order and payload functions
Classification
Error and gamma functions
(C99)
(C99)
(C99)
(C99)
Types
Macro constants
Special floating-point values
Arguments and return values
Error handling
Fast operation indicators
ヘッダーで定義 <math.h>
float nanf ( const char * arg ) ;
(1) (C99以降)
double nan ( const char * arg ) ;
(2) (C99以降)
long double nanl ( const char * arg ) ;
(3) (C99以降)
_Decimal32  nand32 ( const char * arg ) ;
(4) (C23以降)
_Decimal64  nand64 ( const char * arg ) ;
(5) (C23以降)
_Decimal128 nand128 ( const char * arg ) ;
(6) (C23以降)

実装定義の文字列 arg を対応するquiet NaN値に変換します。これは、適切な解析関数 strtoX を呼び出す場合と同様に行われます:

  • 呼び出し nan ( "n-char-sequence" ) は、 n-char-sequence が数字、ラテン文字、アンダースコアのシーケンスである場合、呼び出し /*strtoX*/ ( "NAN(n-char-sequence)" , ( char ** ) NULL ) ; と等価です。
  • 呼び出し nan ( "" ) は、呼び出し /*strtoX*/ ( "NAN()" , ( char ** ) NULL ) ; と等価です。
  • 呼び出し nan ( "string" ) は、 string n-char-sequence でも空文字列でもない場合、呼び出し /*strtoX*/ ( "NAN" , ( char ** ) NULL ) ; と等価です。
1) 解析関数は strtof です。
2) 解析関数は strtod です。
3) 解析関数は strtold です。
4) 解析関数は strtod32 です。
5) 解析関数は strtod64 です。
6) 解析関数は strtod128 です。

10進浮動小数点値を返す関数は、実装が __STDC_IEC_60559_DFP__ を事前定義している場合にのみ宣言される (すなわち、実装が10進浮動小数点数をサポートしている場合)。

(C23以降)

目次

パラメータ

arg - NaNの内容を識別するナロウ文字列

戻り値

識別文字列 arg に対応するquiet NaN値、または実装がquiet NaNをサポートしていない場合はゼロ。

実装がIEEE浮動小数点演算(IEC 60559)をサポートしている場合、quiet NaNもサポートします。

エラー処理

この関数は、 math_errhandling で指定されているいかなるエラー条件の対象にもなりません。

#include <stdio.h>
#include <math.h>
#include <stdint.h>
#include <inttypes.h>
#include <string.h>
int main(void)
{
    double f1 = nan("1");
    uint64_t f1n; memcpy(&f1n, &f1, sizeof f1);
    printf("nan(\"1\")   = %f (%" PRIx64 ")\n", f1, f1n);
    double f2 = nan("2");
    uint64_t f2n; memcpy(&f2n, &f2, sizeof f2);
    printf("nan(\"2\")   = %f (%" PRIx64 ")\n", f2, f2n);
    double f3 = nan("0xF");
    uint64_t f3n; memcpy(&f3n, &f3, sizeof f3);
    printf("nan(\"0xF\") = %f (%" PRIx64 ")\n", f3, f3n);
}

出力例:

nan("1")   = nan (7ff8000000000001)
nan("2")   = nan (7ff8000000000002)
nan("0xF") = nan (7ff800000000000f)

参考文献

  • C17 standard (ISO/IEC 9899:2018):
  • 7.12.11.2 The nan functions (p: 186-187)
  • F.10.8.2 The nan functions (p: 386)
  • C11規格 (ISO/IEC 9899:2011):
  • 7.12.11.2 nan関数群 (p: 256)
  • F.10.8.2 nan関数群 (p: 529)
  • C99規格 (ISO/IEC 9899:1999):
  • 7.12.11.2 nan関数群 (p: 237)
  • F.9.8.2 fabs関数群 (p: 465)

関連項目

(C99)
指定された数値がNaNであるかどうかをチェックする
(関数マクロ)
(C99)
float 型のquiet NaNに評価される
(マクロ定数)
C++ documentation for nanf , nan , nanl