2010年8月21日 星期六

GCC Bug

今天遇到一個Bug, GCC有最佳化, 在x86上執行.
double f(double z)
{
return z;
}

void foo(double fraction)
{
double z = fraction * 20.0;
int t1 = z;
int t2 = f(z);
printf("t1=%d, t2=%d\n", t1, t2);
}

void main()
{
foo(6.0/20.0);
}

結果 t1 是5, t2是6

詳細的原因我沒去追, 不過compile的時後多加個flag就解決了
-ffloat-store

3 則留言:

SCREAMLab 提到...

不知道他的assembly是怎樣?

是因為存到register,然後知後有roudning嗎?

該請唯中大師出馬

Keiko 提到...
作者已經移除這則留言。
Keiko 提到...

哈,有事弟子服其勞:
Re: GCC Bug


請老師參考一下。問題的原因,跟老師猜測的一樣,是出在進位的時候,只是 FPU 的模式還多了一些。

PS: 沒有回應在該篇文章,因為 blogger 的回應實在不太好用~