【发布时间】:2014-02-28 02:04:43
【问题描述】:
我正在使用 VS 2012,我遇到了非常恼人的行为(有时我的浮点数是 NaN):
auto dbgHelp = std::to_string(myFloat);
dbgHelp 最终包含 5008 个字符(你不能发明这些东西)
其中大多数为 0,
结果是:
0.#INF00
那么这是一个错误或标准允许像这样愚蠢的返回值吗?
修复是微不足道的,对我来说,用三元运算符和isnan() 手动做正确的事情
但我想知道标准是否对此有具体规定……
【问题讨论】:
-
float没有NaN的值。你的myFloat的实际价值是多少? -
您可以随时追踪到
to_string以更好地了解为什么它可能会像现在这样失败。 -
MSVC 源代码中充斥着宏重定向、TMP 和 dbg 检查... :D
-
那不是 NaN,它是 Infinity。你可能被零除。该标准没有描述无限有多少个零,
<xlocnum>中的 std::num_put() 函数认为 5000 绰绰有余。该错误已经been filed。它似乎与 std::to_string() 的早期草案有关,之前被 STL 描述为“令人讨厌”。强词夺理。
标签: c++ visual-c++ c++11