【问题标题】:how do i make printf use 'nan' on w32?如何让 printf 在 w32 上使用“nan”?
【发布时间】:2017-09-06 02:08:07
【问题描述】:

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

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

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

我想避免使用 isnan() 和 isinf() 手动检查值并硬编码 inf 和 nan 字符串表示形式。

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

【问题讨论】:

  • 没有,没有标准要求双精度值的 string 表示。甚至不是正常的双精度值,有时是句点,有时是逗号。 MSVC 表示相当不稳定,您可以将其设为 lot more wonkier :) 您必须自己使其保持一致。
  • 诡计多端的是,您可能还想要反过来——将文本及其所有变体——更改为 NaN。

标签: c printf nan


【解决方案1】:

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

表示无穷大的 double 参数被转换为 [-]inf 或 [-]infinity 风格之一——哪种风格是实现定义。表示 NaN 的双参数转换为 [-]nan 或 [-]nan( n-char-sequence @ 987654327@ — 哪种样式以及任何 n-char-sequence 的含义是实现定义的。 F 转换说明符生成 INF、INFINITY 或 NAN 而不是 inf、infinity 或 nan。

除此之外,恐怕你将独自一人。

【讨论】:

    猜你喜欢
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    • 1970-01-01
    • 2017-05-22
    相关资源
    最近更新 更多