【深入浅出-JVM】(3):浮点数
-5 浮点数推导
二进制转十进制
1 10000001 01000000000000000000000
1 10000001 101000000000000000000000 如果指数位不全为 0 则尾数位首位+1 ,如果指数位全为 0,则尾数位首位+0
十进制 = -1 * 2^(129-127) * (1 * 2^0 + 1 * 2^-2) = -1 * 4 * 1.25 = -5
十进制转二进制
5 = 101(B) = 1.01 * 2^2 指数为 2,则指数段的值为 2+127 = 129 = 10000001 因为不全为 0 尾数部分首位的 1 去掉,然后右侧补全 0
1 负数
1 10000001 指数段的值为 2+127=129
1 10000001 101 尾数段为 101
1 10000001 01 因为不全为 0 尾数部分首位的 1 去掉
1 10000001 01000000000000000000000 然后右侧补全 0,尾数部分一共23 位
十进制(整数)转二进制(整数)
除2取余, (直到商为 0) ,逆序
789=1100010101(B)
394 1
197 0
98 1
49 0
24 1
12 0
6 0
3 0
1 1
0 1 (最终 商 < 1)
1100010101
推理: A = abcdef(B)
A = f * 2 ^ 0 + e * 2 ^ 1+ d * 2 ^ 2 + c * 2 ^ 3+ b * 2 ^ 4 + a * 2 ^ 5
A/2 = e * 2 ^ 0+ d * 2 ^ 1+ c * 2 ^ 2 + b * 2 ^ 3 + a * 2 ^ 4 除以 2 留余数得到 f
.... 除以 2 留余数得到 d
..... 除以 2 留余数得到 a
反过来写就是 abcdef
十进制纯小数转换成二进制纯小数
乘2 取整,直到小数部分为 0(或者达到所要求的精度…),顺序排列
0.8125 = (0.1101)(B)
1.6250 1
1.25 1
0.5 0
1.0 1
十进制小数转换成二进制小数
整数部分与小数部分合并
(789.8125) = 1100010101.1101(B)
float 特殊值
|含义|数值|
|--|--|
|正无穷 | 0 11111111 00000000000000000000000 |
|负无穷 | 1 11111111 00000000000000000000000|
|NaN | 0 11111111 10000000000000000000000|
|最大浮点数 | 0 11111110 11111111111111111111111|1.11111111111111111111111 * 2^(254-127)
|最小规范化正浮点数 | 0 00000001 00000000000000000000000|1.0 * 2^1-127|
|最小正浮点数 | 0 00000000 00000000000000000000000|
|0 | 0 00000000 00000000000000000000000|
注意
float最大精度 小数点后 6 位
浮点数 0.99 根本没办法用二进制表示 ,无穷多的 11111 只有 0.5 倍数的可以被二进制科学计数法表示
感谢您的耐心阅读,如果您发现文章中有一些没表述清楚的,或者是不对的地方,请给我留言,您的鼓励是作者写作最大的动力。
作 者 : @mousycoder
原文出处 : http://mousycoder.com/thinking-in-jvm/3/
【深入浅出-JVM】(3):浮点数的更多相关文章
- 深入浅出 JVM GC(3)
# 前言 在 深入浅出 JVM GC(2) 中,我们介绍了一些 GC 算法,GC 名词,同时也留下了一个问题,就是每个 GC 收集器的具体作用.有哪些 GC 收集器呢? Serial 串行收集器(只适 ...
- 深入浅出 JVM GC(2)
# 前言 在 深入浅出 JVM GC(1) 中,限于上篇文章的篇幅,我们留下了一个问题 : 如何回收? 这篇文章将重点讲述这个问题. 在上篇文章中,我们也列出了一些大纲,今天我们就按照那个大纲来逐个讲 ...
- 阿里架构师带你深入浅出jvm
本文跟大家聊聊JVM的内部结构,从组件中的多线程处理,JVM系统线程,局部变量数组等方面进行解析 JVM JVM = 类加载器(classloader) + 执行引擎(execution engine ...
- JVM之浮点数(float)表示
1. 浮点数的组成:符号位.指数位.尾数位. 1.1 符号位: 占1位,表示正负数: 1.2 指数位: 占8位: 1.3 尾数位: 占23位. 2. 浮点数的表示: 2.1 取值: sflag * ...
- 深入浅出 JVM GC(4)常用 GC 参数介绍
# 前言 从前面的3篇文章中,我们分析了5个垃圾收集器,还有一些 GC 的算法,那么,在 GC 调优中,我们肯定会先判断哪里出现的问题,然后再根据出现的问题进行调优,而调优的手段就是 JVM 提供给我 ...
- 深入浅出 JVM ClassLoader
# 前言 在 JVM 综述里面,我们说,JVM 做了三件事情,Java 程序的内存管理, Java Class 二进制字节流的加载(ClassLoader),Java 程序的执行(执行引擎).我们也说 ...
- 深入浅出 JVM GC(1)
# 前言 初级 Java 程序员步入中级程序员的有一个无法绕过的阶段------GC(Garbage Collection).作为 Java 程序员,说实话,很幸福,不用像 C 程序员那样,时刻关心着 ...
- 深入浅出JVM
这篇文章简要解析了JVM的内部结构.下面这幅图展示了一个典型的JVM(符合JVM Specification Java SE 7 Edition)所具备的关键内部组件. 上图展示的所有这些组件都将在下 ...
- 对JVM还有什么不懂的?一文章带你深入浅出JVM!
本文跟大家聊聊JVM的内部结构,从组件中的多线程处理,JVM系统线程,局部变量数组等方面进行解析 JVM JVM = 类加载器(classloader) + 执行引擎(execution engine ...
随机推荐
- 完美实现鼠标拖拽事件,解决各种小bug,基于jquery
鼠标拖拽事件是web中使用频率极高的事件,之前写过的代码包括网上的代码,总存在各种各样的问题,包括拖拽体验差,松开鼠标后拖拽效果仍存在以及代码冗余过大等 本次我才用jQuery实现一个尽可能高效的拖拽 ...
- 芒果TV For Windows10 成长历史 & 迭代历史 & 新闻报道
芒果TV 是国内领先的基于Windows10操作系统并支持Windows10全系列设备的视频应用和内容服务商. Win10商店版<芒果TV>是湖南快乐阳光互动娱乐传媒有限公司专门为Wind ...
- 操作XML文档遇到的XMLNS问题及解决方法 (C# 和 PHP)
原文:操作XML文档遇到的XMLNS问题及解决方法 (C# 和 PHP) 不管是用 PHP 还是 C#, 在操作 XML 的时候我们除了一个节点一个节点去取值之外, 还有一个非常方便的表达式, 就是 ...
- GIS基础软件及操作(八)
原文 GIS基础软件及操作(八) 练习八.地理建模 地理建模:Model Builder 土壤侵蚀危险性建模分析 认识ModelBuilder操作界面 1: 添加硬盘上的数据或工具到模型中,数据也可以 ...
- uwp之拍照(使用后置摄像头)
参考:wp8.1之拍照(获取焦点,使用后置摄像头) uwp开启摄像头要借助CaptureElement呈现来自捕获设备(如照相机或网络摄像机)的流.今天讲讲如何打开摄像头,获取焦点,以及拍照.废话不多 ...
- FMX 动态创建 和 销毁(释放free) 对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
- Play Framework 模板里使用注入访问数据层
从Play2.4开始,推荐使用依赖注入替代静态控制器.因此我们不能像play2.3那样,在模板里直接调用object访问数据层.是的,我们还是可以使用常规方式,通过传参到模板里.不过这样很多时候不方便 ...
- ACL 我为什么要发明一个轮子?
现在成熟的开发库与开发框架有很多,所以平时我们在开发自己的应用程序时一般直接拿来用就可以了,所以当我先是开发出 C 语言版的 acl 框架库时有人认为是这个轮子是否值得发明,而当我再开发出基于 acl ...
- Qt单元测试浅析
Qt单元测试框架,使用于基于Qt的应用程序和库,先从一个简单的demo工程说起吧. 我们可以通过QtCreator来创建一个简单的Qt单元测试工程,夏天到了,这个demo工程的名字就叫Summer好了 ...
- [2017.02.21-22] 《Haskell趣学指南 —— Learning You a Haskell for Great Good!》
{- 2017.02.21-22 <Haskell趣学指南 -- Learning You a Haskell for Great Good!> 学习了Haskell的基本语法,并实现了一 ...