在跨平台计算器应用程序上工作,我只是注意到在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实现,而不是平台)。
答案 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>
除此之外,你会独自一人,我很害怕。