【深入浅出-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/

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个使用Java语言编写的应用程序的命令行运行指令。该程序是一个消息队列中间件的Broker,使用了RocketMQ框架实现。其中的参数含义如下: -server:使用JVM的server模式。在多核CPU上提高性能。 -Xms2g:JVM启动时堆内存的最小值为2G。 -Xmx2g:JVM堆内存的最大值为2G。 -XX:+UseG1GC:使用G1垃圾回收器。 -XX:G1HeapRegionSize=16m:G1垃圾回收器内存区域的大小为16M。 -XX:G1ReservePercent=25:预留25%的空间以避免太满引发的性能问题。 -XX:InitiatingHeapOccupancyPercent=30:G1在堆内存使用达到30%时会触发垃圾回收。 -XX:SoftRefLRUPolicyMSPerMB=0:清除软引用的时间间隔为0,即软引用的对象一旦没有被使用就会被立即清除。 -verbose:gc:打印GC日志。 -Xloggc:/dev/shm/rmq_srv_gc_%p_%t.log:将GC日志输出到/dev/shm/rmq_srv_gc_%p_%t.log文件中。 -XX:+PrintGCDetails:打印GC详细信息。 -XX:+PrintGCDateStamps:打印GC时间戳。 -XX:+PrintGCApplicationStoppedTime:打印应用程序停止时间。 -XX:+PrintAdaptiveSizePolicy:打印自适应策略的信息。 -XX:+UseGCLogFileRotation:启用GC日志文件轮换。 -XX:NumberOfGCLogFiles=5:GC日志文件轮换时保留的文件数目。 -XX:GCLogFileSize=30m:GC日志文件的大小为30M。 -XX:-OmitStackTraceInFastThrow:关闭快速抛出异常时的栈信息。 -XX:+AlwaysPreTouch:在JVM启动时预先分配堆内存。 -XX:MaxDirectMemorySize=15g:最大直接内存大小为15G。 -XX:-UseLargePages:不使用大页面。 -XX:-UseBiasedLocking:不使用偏向锁。 -Drocketmq.client.logUseSlf4j=true:使用SLF4J作为日志框架。 -c ../conf/broker.conf:指定Broker的配置文件路径。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值