Namespaces
Variants

std:: nan, std:: nanf, std:: nanl

From cppreference.net
Common mathematical functions
Nearest integer floating point operations
(C++11)
(C++11)
(C++11) (C++11) (C++11)
Floating point manipulation functions
(C++11) (C++11)
(C++11)
(C++11)
Classification and comparison
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Types
(C++11)
(C++11)
(C++11)
Macro constants
Определено в заголовке <cmath>
float nanf ( const char * arg ) ;
(1) (начиная с C++11)
double nan ( const char * arg ) ;
(2) (начиная с C++11)
long double nanl ( const char * arg ) ;
(3) (начиная с C++11)

Преобразует строку символов arg в соответствующее значение тихого NaN, как если бы вызывалась функция std::strtof , std::strtod или std::strtold соответственно.

1) Вызов std :: nanf ( " n-char-sequence ") , где n-char-sequence представляет собой последовательность цифр, ASCII-букв и подчеркиваний, эквивалентен вызову std:: strtof ( "NAN( n-char-sequence ) " , ( char ** ) nullptr ) ; .
Вызов std :: nanf ( "" ) эквивалентен вызову std:: strtof ( "NAN()" , ( char ** ) nullptr ) ; .
Вызов std :: nanf ( " string ") , где string не является ни n-char-sequence , ни пустой строкой, эквивалентен вызову std:: strtof ( "NAN" , ( char ** ) nullptr ) ; .
2) То же, что и (1) , но вызывает std::strtod вместо std::strtof .
3) То же, что и (1) , но вызывает std::strtold вместо std::strtof .

Содержание

Параметры

arg - узкая символьная строка, идентифицирующая содержимое NaN

Возвращаемое значение

Тихий NaN, соответствующий идентифицирующей строке arg или ноль, если реализация не поддерживает тихие NaN.

Если реализация поддерживает арифметику с плавающей запятой IEEE (IEC 60559), она также поддерживает тихие NaN.

Обработка ошибок

Эта функция не подвержена ни одному из условий ошибок, указанных в math_errhandling .

Пример

#include <cmath>
#include <cstdint>
#include <cstring>
#include <iostream>
int main()
{
    double f1 = std::nan("1");
    std::uint64_t f1n; std::memcpy(&f1n, &f1, sizeof f1);
    std::cout << "nan(\"1\") = " << f1 << " (" << std::hex << f1n << ")\n";
    double f2 = std::nan("2");
    std::uint64_t f2n; std::memcpy(&f2n, &f2, sizeof f2);
    std::cout << "nan(\"2\") = " << f2 << " (" << std::hex << f2n << ")\n";
}

Возможный вывод:

nan("1") = nan (7ff0000000000001)
nan("2") = nan (7ff0000000000002)

Смотрите также

(C++11)
проверяет, является ли данное число NaN
(функция)
(C++11)
вычисляется в тихий NaN типа float
(макроконстанта)
идентифицирует типы с плавающей запятой, которые могут представлять специальное значение "тихий не-число" (NaN)
(публичная статическая константа-член std::numeric_limits<T> )
идентифицирует типы с плавающей запятой, которые могут представлять специальное значение "сигнальный не-число" (NaN)
(публичная статическая константа-член std::numeric_limits<T> )
[static]
возвращает значение тихого NaN для данного типа с плавающей запятой
(публичная статическая функция-член std::numeric_limits<T> )
возвращает значение сигнального NaN для данного типа с плавающей запятой
(публичная статическая функция-член std::numeric_limits<T> )
Документация C для nanf , nan , nanl