C 浮点打印

C 浮点打印,c,floating-point,windows-xp,C,Floating Point,Windows Xp,我有以下计划: #include <stdio.h> int main(int args, char *argv[]) { printf("%f\n", 0.99999); printf("%e\n", 0.99999); } 为什么第一个数字错了?我使用Windows XP,编译器“Logiciels Informatique lcc-win32 3.8版。编译日期:2012年11月30日19:38:03” 该程序正确,其输出应为: 0.999990 9.999

我有以下计划:

#include <stdio.h>

int main(int args, char *argv[]) {
    printf("%f\n", 0.99999);
    printf("%e\n", 0.99999);
}

为什么第一个数字错了?我使用Windows XP,编译器“Logiciels Informatique lcc-win32 3.8版。编译日期:2012年11月30日19:38:03”

该程序正确,其输出应为:

0.999990
9.999900e-01
或者类似的东西

(您不使用
args
argv
,而
main
的第一个参数的通常名称是
argc
,而不是
args
,但这两个参数都不是会影响程序行为的问题。)

看起来您在实现中发现了一个bug,可能是在运行库中,而不是在编译器本身中。我在谷歌的简短搜索中没有提到这个特定的bug(事实上,最热门的是这个问题)


我建议联系lcc win的维护人员;联系方式在网上。一个简短的描述和到这个问题的链接应该提供足够的信息,至少从一开始。

您使用的是或其衍生物?如果添加#include,您是否也会遇到同样的问题?(这不仅仅是精度问题;输出被关闭了100倍。)当我使用printf(“%e\n”,0.99999);答案是正确的9.999900e-001问题只针对特定的数字出现。我使用lcc win,是的,包括。这些信息需要在您的问题中。请更新它,说明您使用的是lcc win(以及哪个版本),并将源代码更新为实际包含
#include
(并且仍然存在问题)的版本。一定要复制并粘贴整个程序。@KeithThompson:声誉为1的用户显示出真正的编译器错误,应该获得某种奖励。
0.999990
9.999900e-01