浮点数大白话

欣喜 Java教程 发布时间:2024-01-17 14:41:30 阅读数:16141 1
下文笔者讲述浮点数的简介说明,如下所示

浮点数简介

在计算机系统的发展过程中 
   曾经提出过多种方法表示实数
   但是到为止使用最广泛的是浮点表示法

浮点表示法
      即用浮点数来表示实数
所谓浮点数:
     指小数点的位置不是固定的
      是可以浮动的
浮点数采用IEEE 754这个标准作为统一的标准
    该标准中严格定义个浮点数的表示格式、转化过程。

IEEE 754标准简介

IEEE 754:
    用科学计数法来表示实数
    将表示结果转为二进制的方式,方便计算机存储

例:
   250---在科学计数法中表示为2.5x10^2。
 
+2 2.5:
    +是表示正负的符号位
     2是指数位
    2.5是开头的数

IEEE 754:
    将上面的这种表示思路引入计算机中适配计算机中二进制的表示法
      规定浮点数的表示格式为:
        位符号位 位指数位 位尾数位
        1位符号位 8位指数位 23位尾数位
例:0.75用单精度浮点数表示的过程:
2.1.十进制转二进制
0.75x2=1.5
     整数位为1,小数位为0.5

0.5x2=1
    整数位为1,小数位为0

0.75转成二进制小数结果为0.11

2.2.规范尾数位
      规范尾数位的意思是
     将小数点右移
      直到出现整数位不为0的时候为止
0.11规范后的结果是:
   1.1
     小数点右移了一位
     由于有23位的空间大小,于是用0填充上:
     1.100000000000000000000000
     由于开头整数位一定是1
         所以规范里采取了简略的表示,将整数部分略去,最后规范结果为:
       100000000000000000000000

2.3.计算指数位
     指数位用来表示小数点移动了多少位
     也就是指数位的取值范围就决定了整个数据能表示的范围
      指数位用给8位的长度
      指数位最大是255
      但是第一位被留作了符号位
      所以能表示值的只有后七位
     所以整个符号位的表示范围是-127到+127。
      要考虑到负的指数值
       因为小数点即要考虑到左移的情况,也要考虑到右移的情况。

如:
    110.001,在规范尾数位的时候就要左移,那么指数位就应该是复数。

如:
    0.11,在规范尾数位的时候就要右移,那么指数位就应该是正数。

   将小数点右移了一位,按理说指数位的值应该是1,但规范里面这里比较特别,
   默认指数位的初始值不是0而是127
    如果是左移1位的话就127+1,右移一位的话就是127-1。
   上面我们将小数右移了1位,于是指数位是:
      01111110

2.4.拼接结果
  最终结果为
  0 01111110 10000000000000000000000
3.精度丢失
JAVA中浮点数精度丢失的问题:
double a=0.1;
double b=0.2;
System.out.println(a+b);
0.1转二进制:

0.0001100110011001100110011001100110011001100110011...

0.2转二进制:

0.00110011001100110011001100110011001100110011001101...

将他们转浮点数后再进行运算
   运算的结果转十进制输出
   输出的结果一定不会是0.3
   以上就是浮点数运算中精度丢失的根本原因
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaCourse/202401/7685.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者