c - 什么浮点值使 sprintf_s() 产生 "1.#QO"?

标签 c visual-studio-2008 format floating-point printf

我有一些(遗留嵌入式 c)代码通过一些 sprintf 调用生成 .csv 文件。偶尔我会看到 1.#QO 的值。我已经尝试在应该给出负无穷大、正无穷大和 NaN 的条件下重现这些值,但它们似乎都没有给我神奇的 1.#QO 结果。那么产生这种值(value)的是什么?

...是的,我知道产生该值的数学运算显然出了问题,但理解它的含义将有助于调试工作。

[编辑 1] 进行转换的实际行是:

sprintf_s(txt, CSV_HEADER_SIZE, "%.3f", value);

哪里:

#define CSV_HEADER_SIZE (100)
char txt[CSV_HEADER_SIZE];

我正在使用 MS Visual Studio 2008 进行编译。

[编辑 2] 进一步挖掘显示 0xFFFFFFFF 给出 -1.#QO:

unsigned int i = 0xFFFFFFFF;
float* f = (float*)&i;
printf("%.3f", *f); // gives -1.#QO

..并在 Visual Studio 调试器中查看它,将其扩展为 -1.#QNAN00 所以看起来这可能是 NaN 的 Microsoft 特定表示?

最佳答案

“-1.#QO”在小数点后“四舍五入”后为“-1.#QNAN”。 N 舍入为 O,如 'A' >= '5' 和 'N' + 1 == 'O'。

这与您的调试器显示“-1.#QNAN00”的原因类似,因为它打印了 7 个位置并在末尾添加了填充零。

QNaN 是 quiet NaN .

关于c - 什么浮点值使 sprintf_s() 产生 "1.#QO"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5939573/

相关文章:

c - c中的ilogb()是什么?

visual-studio-2008 - 绝对是项目一部分的程序集所需的引用

matlab - 在处理二进制数时,如何从 char 格式转换为 double 格式?

python - 当我在 Odoo 中上传图像时,如何在对话框窗口中按图像格式进行过滤?

c - 是否可以使用格式说明符作为函数的参数

c - 有多少种语言/* ..................... */作为评论?除了 CSS

c - 为什么 d 的值是 1 而不是 6?

asp.net - 连接到源文件 XYZ 的撤消管理器时出错

visual-studio-2008 - Visual Studio 9解决方案中的项目数量是否会影响解决方案的负载和生成时间?

python 创建 .pgm 文件