先來看一下 long long 跟 float ,long long的size是8個byte,float的size是4個byte
long long * float,compiler會將結果存到float的temp變數裡,此時誤差就可能會出現了,但是這個誤差是「有條件」地出現,並不是任何long long的數字乘上float都會產生誤差的
以一個簡單的程式來驗證是否會產生誤差
bool check_longlong(long long v1) { float f = 1.0f; long long v2 = long long( v1 * f ); printf("ori value=%lld, new value=%lld, ori==new=%d", v1, v2, v1==v2); return v1==v2; } int _tmain(int argc, _TCHAR* argv[]) { check_longlong(0xF0000000000);//true - OK check_longlong(0x0FFFFFFFFFF);//false - Error! check_longlong(0x0FFFFFF);//true - OK check_longlong(0x1FFFFFF);//false - Error! return 0; }