0做除数时

试着编译运行下面的几行小程序:

正常编译后,运行发生了异常,程序被终止运行,啥也没打印出来。当然问题也是显然的,严重的除0异常。(没有人会写程序故意除以一个零,但难保来自于其它输入渠道的数据不会导致一个0除数。这里只是个例子,就简单写写了。)

我们再把程序稍微改动一点:

 

只有一处改动:被除数由“3”变成“3.0”。

结果却有所不同。当然,要说不正常结果依旧是不正常。但这次却不是严重的终止了程序的运行时异常,程序本身是正常运行的,而且有结果输出,只不过输出了一个怪怪的东西,标示这个浮点数有问题。

前后的区别在于:在第一种情况下,是两个整数相除,当除数为0时产生一个严重的除0异常,程序被终止运行;在第二种情况下,由于除法运算的第一个操作数为double型,那么除数a也被先提升为double型然后参与运算。浮点运算中,除0错误的结果不是一个运行时异常,而是得到一个“Not A Number”的特殊浮点值作为结果,当这个值被打印时就输出了那个怪怪的东西。

可以联想到的一件事情是:float/double类型是有这种特殊值的,这一点不像各种int类型。一个int32bit,不管怎么组合,其结果都是一个合法的int值。但float/double不同,float32bit或者double64bit,并非每种组合都是合法的。因此通过某种方式随意组织32bit,来试图形成一个“float随机数”的想法是不正确的。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值