首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >什么浮点值使sprintf_s()产生"1.#QO"?

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

Stack Overflow用户
提问于 2011-05-10 00:10:35
回答 4查看 6.9K关注 0票数 18

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

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

编辑1执行转换的实际行是:

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

其中:

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

我正在用MS Visual Studio2008编译。

编辑2进一步挖掘表明0xFFFFFFFF提供了-1.#QO

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

..and在Visual Studio调试器中查看它,将其扩展到-1.#QNAN00,因此看起来这可能是特定于微软的NaN表示

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-10 22:42:52

"-1.#QO“是小数点后三位舍入后的"-1.#QNAN”。N舍入为O,如'A‘>= '5’和'N‘+1 == 'O’。

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

QNaN是quiet NaN

票数 11
EN

Stack Overflow用户

发布于 2011-05-10 22:41:51

在做了大量的工作之后,我可以断定地说,将一个4字节的浮点数设置为0x7FFFFFFF,并使用%.3f的格式说明符将它传递给sprintf_s,这就是我得到1.#QO的原因

const int bufSize = 100;
char buf[bufSize];
unsigned int i;
float* f = (float*)&i;
int retval;

i = 0xFFFFFFFF;
retval = sprintf_s(buf, bufSize, "%.3f\n", *f);
printf("sprintf_s returned %d, converted val = %s", retval, buf); // == sprintf_s returned 7, converted val = -1.#QO
retval = sprintf_s(buf, bufSize, "%f\n", *f);
printf("sprintf_s returned %d, converted val = %s", retval, buf); // == sprintf_s returned 10, converted val = -1.#QNAN0

i = 0x7FFFFFFF;
retval = sprintf_s(buf, bufSize, "%.3f\n", *f);
printf("sprintf_s returned %d, converted val = %s", retval, buf); // == sprintf_s returned 6, converted val = 1.#QO
retval = sprintf_s(buf, bufSize, "%f\n", *f);
printf("sprintf_s returned %d, converted val = %s", retval, buf); // == sprintf_s returned 9, converted val = 1.#QNAN0

...it似乎是%.3f格式说明符在裁剪NAN结果,所以本该是1.#QNAN0的内容被裁剪成了1.#QO

票数 2
EN

Stack Overflow用户

发布于 2011-05-10 00:26:13

稍微用谷歌搜索一下就会发现除以0的错误。不过,如果是这样的话我会期待不同的结果。也就是说,它似乎是特定于MS/Visual C的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5939573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档