将int64转换成double问题
想把将int64转换成double类型
不过从msdn上看到说这样转换会产生误差
谁能结实一下这个问题
另外从网上找了个源码看看:
double Int64ToDouble(__int64 in64)
{
int flag=0;
double d;
if(in64 < 0)
{//负数处理
flag = 1;
in64 = -in64;
}
d = (unsigned long)(in64 >> 32);
// 直接运算1<<32会有数值溢出
d *= (1<<16);
d *= (1<<16);
d += (unsigned long)(in64 & 0xFFFFFFFF);
if(flag)
d = -d;
return d;
}
为什么直接运算1<<32会有数值溢出
而分两次运算就不会出问题呢