今天遇到一個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 則留言:
不知道他的assembly是怎樣?
是因為存到register,然後知後有roudning嗎?
該請唯中大師出馬
哈,有事弟子服其勞:
Re: GCC Bug
請老師參考一下。問題的原因,跟老師猜測的一樣,是出在進位的時候,只是 FPU 的模式還多了一些。
PS: 沒有回應在該篇文章,因為 blogger 的回應實在不太好用~
張貼留言