想使用std::nan和std::nanf来创建带有一些自定义有效负载(非装箱)的 nan 值。
但是,它确实没有按预期工作:
但是,对于 Visual Studio 2015,该功能显然没有正确实现。cppreference.com 提出的确切样本产生:
nan("1") = nan (7ff8000000000000)
nan("2") = nan (7ff8000000000000)
Run Code Online (Sandbox Code Playgroud)
这不是我们所期望的。VS 实现有错吗?如果不是,那么用于产生7ff8000000000001和的正确参数是7ff8000000000002什么?
std::nan 根据定义,具有实现定义的行为,因此只要返回某种安静的 NaN,VS 肯定不会错。
事实上,微软文档有这样的说法:
这些
nan函数返回一个浮点值,该值对应于一个安静的(无信号)NaN。输入值被忽略。有关如何为输出表示 NaN 的信息,请参阅 printf、_printf_l、wprintf、_wprintf_l。
https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/nan-nanf-nanl?view=vs-2017
基于一个小测试,这似乎是真的(不出所料):
std::nan("1") = 7ff8000000000000
std::nan("2") = 7ff8000000000000
std::nan("NAN(1)") = 7ff8000000000000
std::nan("NAN(2)") = 7ff8000000000000
std::nan("NAN1") = 7ff8000000000000
std::nan("NAN2") = 7ff8000000000000
std::nan("NAN 1") = 7ff8000000000000
std::nan("NAN 2") = 7ff8000000000000
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
437 次 |
| 最近记录: |