无穷大与 NAN 值

Infinity vs NAN values

本文关键字:NAN 无穷大      更新时间:2023-10-16

我注意到无穷大和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

我注意到无穷大和 NAN 表示的浮点值有所不同。

是的,这并不奇怪。这些值不同,因此它们的表示形式也应不同。

这是否在标准中指定了某些内容?

在C++标准中?不。

在某些浮点标准中,如 IEEE-754?是的。

注意:在C++中,您的联合技巧具有未定义的行为。请改用memcpy