我越来越从round()
和roundf()
功能意想不到的结果在math.h
库。下面是示例代码:我如何错误地使用C中的round()函数?
#include <stdio.h>
#include <math.h>
int main(void)
{
float f;
double d;
/* Note man page says that roundf() returns a float
and round() returns a double */
f = roundf(1.2);
d = round(1.2);
printf("%f\n", f);
printf("%lf\n", d);
return 0;
}
当我complie并运行该程序,我得到:
gcc -lm round.c
./a.out
288.000000
524288.000000
奇怪吧?
更新:随着答案我已经证实,代码在新的编译器上正常工作。 (我认为%lf不是正确的printf说明符,但在这种情况下不会影响最终结果。)我需要弄清楚为什么编译器可能会这样做,因为我运行的代码使用了round()和已经在同一台机器上编译。当我弄明白的时候我会更新这篇文章。
gcc -v
Reading specs from /usr/lib/gcc-lib/i386-slackware-linux/2.95.3/specs
gcc version 2.95.3 20010315 (release)
我不明白为什么。它在我的情况下输出1.000000。 – tvanfosson 2009-02-22 22:24:22
Upvoted抵消downvote。这是一个完全有效的问题。如果我有这种行为,我也会问这个问题。 – 2009-02-22 22:31:48
请更新您的编译器。 GCC 2.95.3它已经8岁了......这些年来已经修复了数百万的错误。 – 2009-02-22 23:04:13