【问题标题】:lcc printf floating pointlcc printf 浮点数
【发布时间】:2026-02-15 06:30:01
【问题描述】:

我有以下程序:

#include <stdio.h>

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

结果是:

0.009990
9.999900e-001

为什么第一个数字是错误的?我使用 Windows XP,编译器“Logiciels Informatique lcc-win32 version 3.8. Compilation date: Nov 30 2012 19:38:03”。

【问题讨论】:

  • 您使用的是lcc 还是它的派生词lcc-win?如果添加#include ,是否也有同样的问题? (这不仅仅是一个精度问题;输出相差 100 倍。)
  • 当我使用 printf("%e\n", 0.99999);答案是正确的 9.999900e-001 这个问题只出现在特定的数字上。
  • 我用的是 lcc-win,是的, 也包含在内。
  • 该信息需要在您的问题中。请更新它以提及您正在使用 lcc-win(以及哪个版本),并将源代码更新为实际具有 #include &lt;stdio.h&gt; 的版本(并且仍然存在问题)。确保复制并粘贴整个程序。
  • @KeithThompson:声誉为 1 的用户显示出真正的编译器错误应该获得某种奖励。

标签: c floating-point windows-xp


【解决方案1】:

那个程序是正确的,它的输出应该是:

0.999990
9.999900e-01

或类似的东西非常

(您不使用argsargv,并且main 的第一个参数的通常名称是argc 而不是args,但这些都不是应该影响您的问题程序的行为。)

看起来您在实现中发现了一个错误,可能是在运行时库中,而不是在编译器本身中。我简短的 Google 搜索并没有找到对这个特定错误的引用(事实上,最热门的是这个问题)。

我建议联系lcc-win的维护者;联系信息在web site 上。一个简短的描述和这个问题的链接应该提供足够的信息,至少开始。

【讨论】: