我如何使用printf' nan'在W32?

时间:2017-04-10 21:30:58

标签: c printf nan

在跨平台计算器应用程序上工作,我只是注意到在W32上NaN / Inf值的转换方式不同于字符串而不是OSX / linux。 即。

linux / OSX使用nan rsp inf,而W32使用类似1.#INF resp的内容。 1.#QNAN

在所有平台上获得相同表示的规范方法是什么?

我希望避免使用isnan()isinf()手动检查值,并对inf resp nan字符串表示进行硬编码。

(我在What is the difference between IND and NAN numbers中读到一些评论,实际的"罪魁祸首"是libc实现,而不是平台)。

1 个答案:

答案 0 :(得分:1)

在C11(可能更早)中,这些表示至少部分地由规范强制执行。来自ISO / IEC 9899:2011, 7.21.6.1 fprintf函数部分,第8段:

  

表示无穷大的 double 参数会转换为 [-]inf [-]infinity - 哪种样式是实现定义的。表示NaN的双参数在其中一种样式中转换为 [-]nan [-]nan( n-char-sequence ) - 哪种样式以及任何n-char序列的含义都是实现定义的。 F 转换说明符会生成 INF INFINITY {{1} 而不是 NAN inf infinity 。< / p>

除此之外,你会独自一人,我很害怕。