先來看一下 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;
}