我注意到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
答案 0 :(得分:3)
我注意到Infinity和NAN表示的浮点值有所不同。
是的,这并不奇怪。这些值不同,因此它们的表示形式也应不同。
这是否在标准中指定了一些位置?
在C ++标准中?不。
在某些浮点标准中,例如IEEE-754?是。
注意:在C ++中,您的联合技巧具有未定义的行为。请改用memcpy
。