Spec-Zone.ru › C++

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

Определено в заголовке <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)

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/numeric/math/nan

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API