想与std::nan和std::nanf一起使用自定义有效载荷(非装箱)创建nan值。
但是,它确实不能按预期工作:
但是,在Visual Studio 2015中,该功能显然未正确实现。 cppreference.com提出的确切示例产生:
nan("1") = nan (7ff8000000000000)
nan("2") = nan (7ff8000000000000)
这不是我们期望的。 VS实现错误吗?如果不是,那么用于生成7ff8000000000001
和7ff8000000000002
的正确参数是什么?
答案 0 :(得分:4)
std::nan
根据定义具有实现定义的行为,因此,只要返回某种安静的NaN,VS肯定是没有错的。
实际上,Microsoft文档有这样的说法:
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