一个关于浮点数的有趣的问题

问    Java表达式1/0和1.0/0.0的值是什么?

答      在计算机内部,整数的表示使用补码表示,当被除数为0时,执行该操作的处理器会产生除零异常,在Java语言层面,

        将产生除零异常。

         而浮点数的表示,我们以常用的X86/X64处理器为例,在处理器内部以IEEE754表示,该表示法最初由伯克利分校受

       英特尔公司委托研发,现在已经成为一个事实上的计算机内部浮点数表示标准。

          IEEE754标准采用科学指数计数法表示浮点数,在内存或者寄存器内部,浮点数的表示分为三部分,1位符号位,

        8位指数位,23位小数部分的尾数位。

          

         我们令S=f1(s), E=f2(e), M=f3(m), 则

         浮点数的计算公式为float = (-1)S * (1.M) 2(E), 即-1的S次方,1.M和2的E次方的乘积.

         对于e, 当e!=0且e!=255时,称为浮点数的规范表示,

         S=s, E=e-127, M左侧隐含有1为1.m, 

         当e==0或者e==255时,称为浮点数的非规范表示,

         e==0, 此时,S=s, E=1-127, M左侧没有隐含的1.表示非常接近0的实数,当M等于0时,依据符号位

         +0.0, -0.0.

         e==255,此时,S=s, E=e-127, 如果M为0, 则依据符号位表示+infinite,-infinite。如果M不为0,则表示

         Not a number(NaN), 比如sqrt(-1).

        对于浮点数0.0参与的运算,IEEE754有相关的规定,k/0.0等于infinite,

        测试代码:

        package myAlgoth;
        public class myMain {
    public myMain() {
// TODO Auto-generated constructor stub
    }
    public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.printf("%d\n", 1/0);


System.out.printf("%f", 1.0/0.0); 

    }
       }

       结果:

       1. Exception in thread "main" java.lang.ArithmeticException: / by zero
at myAlgoth.myMain.main(myMain.java:8)

       2. Infinity

       

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值