【发布时间】:2010-10-18 19:40:52
【问题描述】:
void main()
{
float f = 0.98;
if(f <= 0.98)
printf("hi");
else
printf("hello");
getch();
}
我在这里遇到了这个问题。在使用 f 的不同浮点值时,我得到了不同的结果。 为什么会这样?
【问题讨论】:
-
一般规则:永远不要以“精确”的方式比较浮点数。这没有任何意义。总是使用一些“epsilon”
-
@valdo:如果没有更彻底的分析,这通常是个糟糕的建议。
-
@KeithThompson:不幸的是,你需要看到What should
main()return in C and C++?。 -
@KeithThompson:当我发现 2008 年以后的 MSVS 文档记录了它时,我和你听起来一样懊恼——这只是一两周前的事。我同意
int main(void)更可取,但我很想知道为什么int main()不是作为函数定义的扩展版本(配置文件中的电子邮件)。我使用的 GCC 编译器选项意味着我使用int main(void)或int main(int argc, char **argv)而不是int main(),但这不是语言律师的论点。 -
@JonathanLeffler:简而言之,
int main()不等于int main(void)。后者使main(42)违反约束;前者没有。另一方面,int main()在 pre-ANSI C 中肯定是正确的,并且 intent 是为了避免破坏旧代码,所以我认为int main()应该 被允许(但已过时),但恕我直言,标准的当前措辞并未如此说明。
标签: c floating-point floating-point-conversion