Java中null和浮点数相乘_jvm规范之浮点数 - 你知道吗,有个数字它和自身不相等...

原标题:jvm规范之浮点数 - 你知道吗,有个数字它和自身不相等

你知道吗,有个数字它和自身不相等,你知道吗,有两个数字他们是相等的,但是1.0除以他们得到的结果却是大相径庭。本文将为你揭开这神秘的面纱,并自此开启 java jvm 之旅。关注我,我接下来将持续更新 java jvm 知识 、数据结构与算法,你若关注,我必不负所望!

今天,我们说 jvm 里浮点数的表示,已经整理如下:

c9c55383685cf332c4f655adea67193e.png

浮点数的表示,目前几乎都是用 IEEE754 标准,它包括了:正负数,正负0,正负无穷大,以及 NaN(Not a number),其中,NaN = 0.0f / 0.0f,NaN 是无序的,而且 NaN != NaN,本身不相等,这是唯一一例,也无法用标准形式表示。

正负 0 虽然是相等的,但是有区别,1.0 / 0.0 等于正无穷大,1.0/-0.0 等于 负无穷大。此外,正负 0 就没区别了。

现在,我们正式走进浮点数的世界,java jvm 里不只有 单精度浮点数集合,还有单精度扩展指数集合,不只有双精度浮点数集合,还有双精度扩展指数集合。但是,单、双精度扩展指数集合是可选的,而单双精度浮点数集合是必须要实现的,扩展指数集合可以代替浮点数集合。

IEEE754 标准里,一个浮点数表示为:s × m × 2^(e-N+l) 来表示,其中,s 为正负1,表示数字的符号,

m 是一个小于 2^N 的正整数, e 是一个介于 Emin=-(2^(k-1) - 2) 和 Emax=2^(K-l) - l 之间的整数,包括 Emin 和 Emax。N 与 K 的范围则取决于当前采用的浮点数集合。

对于一个数字,可能存在多组 s、m与e的值来表示,此时,可以把 m 的值减半,而 e + 1,得到另一种表示,如果某种表示里 m >= 2^(n-1),则称该表示为标准表示,如果没有,如果 m >= 2^(n-1) 不成立,则称为非标准表示,如果一个数字不存在标准表示,则称这个值为非标准值。

至于 N、K 的范围,请参考下图:

b36abeeb7921aa638eb13b6814fcf406.png

我得承认,浮点数的表示理解起来是比较吃力,我当年读大学时就不理解,如今,还是一知半解。

关注我,带你揭秘 java jvm 奥妙,成为 java 大神。记得关注 + 收藏哦,请随意评论,多谢。返回搜狐,查看更多

责任编辑:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值