我有一些(传统的嵌入式c)代码,通过一些sprintf调用生成一个.csv文件。偶尔我会看到1.#QO的值。我试着用一些条件来重现这些值,这些条件应该给出负无穷大、正无穷大和NaN,但它们似乎都没有给我神奇的1.#QO结果。那么产生这种价值的是什么呢?
……是的,我知道在产生这个值的数学中,显然有些地方出错了,但是理解它的含义将有助于调试工作。
[编辑1]进行转换的实际行是:

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

在哪里?
#define CSV_HEADER_SIZE (100)
char txt[CSV_HEADER_SIZE];

我正在用msvisualstudio2008编译。
[编辑2]更多的挖掘显示0xFFFFFFFF给出-1.#QO
unsigned int i = 0xFFFFFFFF;
float* f = (float*)&i;
printf("%.3f", *f); // gives -1.#QO

…然后在visual studio调试器中将其扩展为-1.#QNAN00,因此看起来这可能是NaN的微软特定表示形式?

最佳答案

“四舍五入”后的“-1.qo”是“-1.qnan”,小数点后3位。n向o取整为“a”>=“5”和“n”+1==“o”。
这也是调试器显示“-1.qnan00”的原因,因为它打印7个位置,并在结尾处添加填充零。
qnanquiet NaN

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

10-13 07:50