Spec-Zone.ru › C

nan, nanf, nanl, nand32, nand64, nand128

Определено в заголовке <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 в соответствующее значение бесшумного 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.

Функции, возвращающие значения с плавающей точкой в десятичной форме, объявляются тогда и только тогда, когда реализация предварительно определяет __STDC_IEC_60559_DFP__ (т.е. реализация поддерживает десятичные числа с плавающей точкой).

(с C23)

Параметры

arg - строка символов, определяющая содержимое NaN

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

Значение бесшумного NaN, соответствующее строке arg , или ноль, если реализация не поддерживает бесшумные NaN.

Если реализация поддерживает арифметику с плавающей точкой IEEE (IEC 60559), она также поддерживает бесшумные 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 (ISO/IEC 9899:2018):
    • 7.12.11.2 Функции nan (стр. 186-187)
    • F.10.8.2 Функции nan (стр. 386)
  • Стандарт C11 (ISO/IEC 9899:2011):
    • 7.12.11.2 Функции nan (стр. 256)
    • F.10.8.2 Функции nan (стр. 529)
  • Стандарт C99 (ISO/IEC 9899:1999):
    • 7.12.11.2 Функции nan (стр. 237)
    • F.9.8.2 Функции fabs (стр. 465)

См. также

isnan
(C99)
проверяет, является ли данное число NaN
(функция-макрос)
NAN
(C99)
возвращает бесшумное NaN типа float
(макроконстанта)
Документация C++ для nanf, nan, nanl

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

Spec-Zone.ru

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