如何打印 NaN 的有效负载?

Rus*_*lan 6 c++ nan

我们有特殊的函数,比如std::nanl用有效负载创建 NaN。目前,我需要执行以下操作才能将其打印回来:

#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdint>

int main()
{
    const auto x=std::nanl("1311768467463790325");
    std::uint64_t y;
    std::memcpy(&y,&x,sizeof y);
    std::cout << (y&~(3ull<<62)) << "\n";
}
Run Code Online (Sandbox Code Playgroud)

这依赖于 的特定表示long double,即它是 x87 FPU 的 80 位类型。是否有任何标准方法可以在不依赖此类实施细节的情况下实现这一目标?

Ste*_*oft 1

C++nan*从 ISO C 导入函数。ISO C 在 7.22.1.3 中声明:

\n\n
\n

n 字符序列的含义是实现定义的

\n
\n\n

有评论

\n\n
\n

实现可以使用 n 字符序列来确定要在 NaN\xe2\x80\x99s 有效数中表示的额外信息。

\n
\n\n

没有方法可以获取存储的信息。

\n

  • 你会如何使用 frexp ?例如,Glibc 记录了对于 NaN,它返回一个 NaN... (2认同)