happy-jvm-3

title: 快乐 JVM(3)—— 浮点数 date: 2019-06-3 13:34:05 categories: 快乐 JVM tags:JVM --- ## -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 倍数的可以被二进制科学计数法表示
上一篇:寒假作业3


下一篇:PTA编程总结3