Бесконечность против значений NAN - PullRequest
2 голосов
/ 30 сентября 2019

Я заметил разницу в значениях с плавающей запятой, представленных для Infinity и NAN. Это указано где-то в стандарте?

#include <cmath>
#include <iostream>
#include <limits>
#include <stdint.h>

union Double
{
    double value;
    uint64_t repr;
};

int main()
{
    Double d;
    d.value = std::numeric_limits<double>::infinity();
    std::cout << std::hex << "inf: " << d.repr << std::endl;

    d.value = std::numeric_limits<double>::quiet_NaN();
    std::cout << std::hex << "NAN: " << d.repr << std::endl;
    return 0;
}
Ouput: 
inf: 0x7ff0000000000000
NAN: 0x7ff8000000000000

1 Ответ

3 голосов
/ 30 сентября 2019

Я заметил разницу в значениях с плавающей запятой, представленных для Infinity и NAN.

Да, это не удивительно. Эти значения различаются, поэтому их представление также должно различаться.

Указано ли это где-то в стандарте?

В стандарте C ++?

В каком-нибудь стандарте с плавающей запятой, таком как IEEE-754? Да.

Примечание: в C ++ ваш трюк объединения имеет неопределенное поведение. Вместо этого используйте memcpy.

...