目录
自动类型转换
数值精度损失
自动类型转换
在不同类型数据间赋值时,会发生自动类型转换
*取值范围大的类型 → 取值范围小的类型,通常是不安全的
*数值溢出(Overflow)
*反之,一定都是安全的吗?
*数值精度损失
问题:从高精度向低精度转换时,会损失什么信息?
*低精度的数据位数比高精度的少,容纳不下高精度的所有信息
——舍入(Round),也称截断(Truncation)
数值精度损失
int ← float 丢失小数部分(非四舍五入)
float ← double 数值溢出或损失精度(位数超过7位时)
float ← long 整数的位数超过7位时,损失精度
精度损失实例分析
为什么long型的123456789不能用float型精确保存呢?
为什么浮点数的输出结果也不准确呢?
C语言中,浮点数在内存中是以阶码和尾数的形式存储的
ANSI C未规定3中浮点类型的长度、精度和表数范围
二进制小数与十进制小数之间并不是一一对应的关系
定点整数可准确表示123456789,而单精度浮点数则只能近似表示123456789
精度损失实例分析
两个数量级相差很大的浮点数做加减运算时,数值小的数会受浮点数精度限制而被忽略