长双1.#QNAN

时间:2018-11-08 07:02:51

标签: c

运行下面的代码,这些代码来自Tim Bailey撰写的“ C编程语言和软件设计简介”第2章,在Android的C4Droid中运行正常,但在Windows中将CodeBlocks与GCC编译器结合使用可得出-1。#QNAN0e + 000长整倍数的上限(LDBL_MAX)。我知道这是指“没有这样的数字”,但是大概是指错误的编码,而不是“没有限制”(我相信正确的答案是1.797693e + 308)。

所以,我检查过的可能原因:

  1. 错别字:我看不到(而且我还从CodeBlocks编辑器中选择了LDBL_MAX)。

  2. 类型不匹配:我认为不是(%e应该没问题)。

  3. float.h中不包含LDBL_MAX:已包含。

任何收到建议的人

#include <stdio.h>
#include <limits.h>
#include <float.h>

int main (void)
{
    printf("Integer range:\t\t%d\t%d\n", INT_MIN, INT_MAX);
    printf("Long range:\t\t%ld\t%ld\n", LONG_MIN, LONG_MAX);
    printf("Float range:\t\t%e\t%e\n", FLT_MIN, FLT_MAX);
    printf("Double range:\t\t%e\t%e\n", DBL_MIN, DBL_MAX);
    printf("Long double range:\t%e\t%e\n", LDBL_MIN, LDBL_MAX);
    printf("Float-Double epsilon:\t%e\t%e\n", FLT_EPSILON, DBL_EPSILON);
}

1 个答案:

答案 0 :(得分:3)

如果您阅读例如this printf reference,您会看到所有不带任何修饰符的浮点格式(包括纯"%e")都适用于double类型。

如果要打印long double的值,则需要L修饰符前缀,如"%Le"所示。

格式说明符和类型不匹配会导致undefined behavior