浮点值的上溢和下溢

上溢

当计算值的值过大时,超出当前类型表示范围,就会发生上溢,如:

int main()
{
	float  b =3.4e38*100.0f;
	printf("%e", b);
	return 0;
}

以前这种情况是未定义的,现在C语言规定,这种情况下会给b一个表示无穷大的特定值用pintf()显示为inf或infinity(或其它内容)。

下溢 

当对一个很小的数做除法时,情况更复杂。float是用指数和尾数部分来存储。假设有这样一个数,它的指数部分是最小值,即全部可用位表示尾数最小值该数是float类型精度表示的最小数字,现在把它除2,通常是指数部分减少。但这个假设中指数已经最小了,所以只好把尾数部分的位往右移动空出一个二进制位,并丢弃最后一个二进制数。以十进制为例:(0.1234e-10)除以十,得到结果为0.01234e-10。虽然得到了结果,但是计算过程中损失了原末尾的有效位上的数字,这叫下溢。C语言把这种损失了类型全精度的浮点值叫做低于正常的浮点值

如果除以一个非常大的值,会导致所有的位都为零。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值