运行下面的代码,这些代码来自Tim Bailey撰写的“ C编程语言和软件设计简介”第2章,在Android的C4Droid中运行正常,但在Windows中将CodeBlocks与GCC编译器结合使用可得出-1。#QNAN0e + 000长整倍数的上限(LDBL_MAX)。我知道这是指“没有这样的数字”,但是大概是指错误的编码,而不是“没有限制”(我相信正确的答案是1.797693e + 308)。
所以,我检查过的可能原因:
错别字:我看不到(而且我还从CodeBlocks编辑器中选择了LDBL_MAX)。
类型不匹配:我认为不是(%e应该没问题)。
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);
}
答案 0 :(得分:3)
如果您阅读例如this printf
reference,您会看到所有不带任何修饰符的浮点格式(包括纯"%e"
)都适用于double
类型。
如果要打印long double
的值,则需要L
修饰符前缀,如"%Le"
所示。
格式说明符和类型不匹配会导致undefined behavior。