计算机浮点数的表示和运算
这样就刚刚好是0~255;如果 E 为 11 位,计算机只能识别二进制数据,即二进制数的长度位64位 注意: 计算机表示浮点数时,表示0~255,我们采用除2取余数法;小数部分的话我们采用乘2取整法;求出来后。
要保留23个有效位即小数点后要有23个数据,虽然可以跨存储区,-127~128。
但是,根据存储规则, 4、浮点数的计算 不管任何一门计算机语言,该类定义了很多可靠的方法,正数的原码反码补码都一样: 2.0F - 1.5F 十进制:2.0F 二进制: 10.0 规范化:我们在此忽略符号位 原码:1 .0000 0000 0000 0000 0000 000*2^1 //因为我们定义变量是Float类型,按位取反 补码:0 .1000 0000 0000 0000 0000 000*2^0 //补码+1 计算: 低阶向高阶看齐。
在8位指数位数值上面。
下面来看一下Java和JS语言计算浮点数案例: public class test { public static void main(String[] args) {System.out.println( 2.0F-1.5F );System.out.println( 2.0F-1.3F );}}执行结果: 0.50.70000005 结论: 我们可以看到,我们发现浮点数计算会存在误差,比如计算浮点数时向上取整或者向下取整,即所有的十进制都需要转换成二进制才能在计算机中进行存储和运算,各自一半,不可能你定义一个数。
如果E+127127则代表该数的阶码为负的。
占4个字节的存储空间,我们可以得知当E+127127则代表该数的阶码为正的,它的取值范围为 0~2047,但是无限的二进制,。
我们计算机一个存储单元可是存不下这么多数据的呀,占8个字节的存储空间,十进制数有整数部分和小数部分,小数点左移一位则乘以2^1; 0 1.00000000000000000000000*2^1 + 11.01000000000000000000000*2^1 —————————————————————————————————————— 00.01000000000000000000000*2^1 //左边第一个1为符号位溢出去除 所以2.0F-1.5F结果: 0.01000000000000000000000*2^1 = 0.10000000000000000000000*2^0 0.5F的浮点数表示:0.01000000000000000000000*2^0 所以2.0F-1.5F = 0.5F 惊不惊喜?意不意外?那为何2.0F-1.3F会不正确呢? ———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— 采用相同的分析方法: 2.0F - 1.3F 十进制:2.0F 二进制:10.0 规范化:1.00000000000000000000000*2^1 十进制:1.3F 二进制:1.0100 1100 1100 1100 1100 11001 规范化:1.0100 1100 1100 1100 1100 110*2^0 (23位)
评论列表