我越來越從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