关于int和float类型转换的问题
代码一:
int x = 0x7fffffff;
float y = x;
cout << x <<endl;
cout << y << endl;
cout <<(int)y <<endl;
代码二:
int x = 0x7fffffff;
cout << x <<endl;
cout << (float)x << endl;
cout <<(int)(float)x <<endl;
这两个代码的功能是一样的,但是在VS2008中显示的结果却不一样。个人认为可能是INTEL 处理器扩展精度到80位产生的结果。不知道我的想法正确不?求大虾赐教,最好详细地从寄存器底层说起,不胜感激!!!
[解决办法]
个人理解
int x = 0x7fffffff;
float y = x;
cout << x <<endl;
cout << y << endl;
cout <<(int)y <<endl;
这里的y,因为从int到float转换的精度问题(float是有误差的,在C基础的书上能找到),再转到(int)y时,会出现有误差的结果
int x = 0x7fffffff;
cout << x <<endl;
cout << (float)x << endl;
cout <<(int)(float)x <<endl;
这里,(int)(float)x ,实际上,在生成代码时,要调用__ftol2_sse函数,而调用__ftol2_sse的实际参数非float而是double,所以(float)x实际执行的是(double)x(隐式转换),精度提高了,所以结果与上面的会不一样
在一般应用中,我们为了提高精度,一般会用double替代float,这样得到的结果会更精确