double型给float型赋值超范围VC6.0中怎么也不出错

来源:百度知道 编辑:UC知道 时间:2024/09/19 16:11:18
#include "stdio.h"
main()
{
float f ;
double ff = 123.456E100;
f = ff;
f *= 3.0;
printf("%.12e\n", f);

}
运行结果:3.703680000000e+102
vc6.0中float占4字节,取值范围是10的38次方,不可能存储10的100次方啊?如果直接用字面量赋值则会出错f=123.456E100;printf("%.12e\n",f); 输出为1.#INF00000000e+000。

vc2008得1.#INF000

难道说vc6.0里面直接优化成printf("%.12e\n", 123.456E100 * 3.0);了?

计算结果没有错。

可能float在VC中跟double占同样字节
int就是占8个字节在VC里面

不是这么算的,浮点数是把4字节中的几个字节放小数部分,几个字节放指数部分,所以100肯定是能放下的。不知道对你的补充理解问题的对不对

VC中类似数据类型转化时都不会报错的,只会报告一个警告“warning C4244: '=' : conversion from 'double' to 'float', possible loss of data”

当大范围的数转换为小范围的数据类型时,会自动的舍掉不能表达的数值;
类似的还有int转为short int等;