C++ 无穷大与NAN值

C++ 无穷大与NAN值,c++,floating-point,C++,Floating Point,我注意到无穷大和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

我注意到无穷大和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
#包括
#包括
#包括
#包括
双联
{
双重价值;
uint64报告;
};
int main()
{
双d;
d、 value=std::numeric_limits::infinity();
标准::cout
我注意到无穷大和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
< C++标准>? 在一些浮点标准中,比如IEEE-754?是的


<>注释:在C++中,你的联合技巧有未定义的行为。使用<代码> MeMCPY < /C> >。

标准没有对浮点号表示表示任何东西;这是一个实现细节。首先,你的代码有未定义的行为。第二,为什么无限和不等于一个数是相同的?如果你的实现使用IEEE754(99%是),然后在IEEE74标准中描述。它没有在C++标准中指定。但是,假设您的实现支持IEEE浮点,则在IEEE-74(IEEE浮点技术标准)中指定表示。。而且,对于支持它们的浮点表示法,NaN和无穷是不同的东西,因此有不同的表示法。如果标准中没有定义上限,那么它的具体实现在哪里?你能详细说明union的未定义行为吗?@PVRT:关于它,有很多问题,例如:真的吗;改为复制字节。