CSAPP:信息的表和处理2

关键点:浮点数、浮点数运算。

二进制小数IEEE浮点数表示浮点数转换(单精度)参考

二进制小数

  形如表示的二进制数,其中每个位的取值范围位0和1。这种表示方式的定义如下:

  符号.变为二进制点,点的左边的位的权是2的正幂,右边的位的权是2的负幂。例如
  小数的二进制表示法只能表示那些能够被写成的数,其他的数值只能近似的表示,增加二进制的长度可以提高表示的精度。

IEEE浮点数表示

  IEEE浮点标准用的形式来表示一个数:

  • 符号(sign)s,决定正负,1表示负数,0表示正数
  • 尾数M是一个二进制小数,他的范围是1~2-ε,或者0~1-ε
  • 阶码(exponent)E的作用是对浮点数加权,这个权重是2的E次幂(E可能为负)
    将浮点数的位表示划分为三个字段,分别对这些值进行编码:
  • 一个单独的符号位s,直接编码符号位s
  • k位的阶码字段编码阶码E
  • n位小数字段编码尾数M,但是编码出来的值也依赖于阶码字段的值是否等于0。

              标准浮点数格式:32位和64位
  在单精度(C语言float)中s,exp,frac的字段分别为1位,k=8位,n=23位,得到一个32位的表示。在双精度(C语言double)中,s,exp,frac的字段分别为1位,k=11位,n=52位,得到一个64位的表示。
  根据exp的值,被编码的值可以分成三种不通的情况,规格化、非规格化、特殊值(有两个变种)
                         单精度浮点值的分类

  • 规格化
    &&,e为无符号数,其位表示为
    其中(单精度127,双精度1023)
    小数字段frac被解释描述为小数值f,其中,其二进制表示为,尾数,有时这种方式也叫做隐含以1开头的表示,因此可以把M看成一个二进制表达式
  • 非规格化
    ,阶码值,尾数的值,也就是小数字段的值,不包含隐含开头1
  • 特殊值
    时。当小数域全为0,得到的值为无穷,,为,,为;当小数域为非零,结果为NaN(Not a Number)

浮点数转换(单精度)

  根据IEEE 754标准,用科学计数法表示一个小数应该是这样的:

注意小数点前面有个1
把5.8这个10进制小数,转化为IEEE 754表示的浮点数。
1.先用科学计数法表示

15.8/2 = 2.9
22.9/2 = 1.45

所以有

  1. 计算指数E(指数也有正负之分)

  2. 尾数frac = 0.45,转换为二进制,不断乘以2
运算 结果 整数部分
0.8*2
0.6*2
0.2*2
0.4*2
0.8*2
0.6*2
0.2*2
0.4*2

根据IEEE 754只需要23位就行。01_1100_1100_1100_1100_1100_1100_1,所以

最终浮点数表示为:

参考

1.CSAPP:2.3章浮点数表示
2.码农翻身:看完这篇文章,你肯定理解什么是浮点数了

CSAPP:信息的表和处理2的更多相关文章

  1. CSAPP:信息的表和处理1

    CSAPP:信息的表和处理1 关键点:寻址.内存.磁盘.虚拟地址.物理地址.整型数组. 信息存储中的几个概念整型数据类型无符号数有符号数几个概念有符号数与无符号数之间转换基于栈与基于寄存器的区别 信息 ...

  2. 【原创】C#搭建足球赛事资料库与预测平台(4) 比赛信息数据表设计

            本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 开源C#彩票数据资料库系列文章总目录:[目录]C#搭建足球赛事资料库与预测平台与彩票数据分析目录 本篇文章开始将逐步介 ...

  3. usb由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备

    在设备管理器的usb设备的属性中,显示提示“由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备”.注册表坏了.经过查询,解决方法如下: 方法:打开注册表编辑器(开始--& ...

  4. SQL查询数据库信息, 数据库表名, 数据库表信息

    SQL查询数据库信息, 数据库表名, 数据库表信息 ---------------------------------------------- -- 以下例子, 在sql_server 中可以直接运 ...

  5. [z]dbms_stats.lock_table_stats对于没有统计信息的表分区同样有效

    常见的分区表DDL如 split partition.add partition都会生成没有统计信息的表分区table partition,长期以来我对dbms_stats.lock_table_st ...

  6. 查看mysql 库信息和表结构与表创建方法

    一.查看基础信息 1.查看数据库存储位置 show global variables like "%datadir%"; 2.查看数据库的版本 select version(); ...

  7. destoon 信息发布表单提交验证

    sell 模块的form表单如下: <form method="post" id="dform" action="?" target= ...

  8. Dynamics 365客户端编程示例:获取当前用户的信息,表单级通知/提示,表单OnLoad事件执行代码

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  9. SQL 从指定表筛选指定行信息 获取表行数

    1.获取指定表的行数 --获取表中数据行数 --select max([列名]) from 表名 2.筛选指定表的指定行数据(数据表分页获取) http://www.cnblogs.com/morni ...

随机推荐

  1. 表单时间和定时器this的指向

    1.针对表单的 form 表单  input 输入框 select 下拉列表  textarea 文本域 type 类型 radio 单选框 checkbox 多选框 password 密码框 but ...

  2. Ext中defaults与fieldDefaults

    不同点:defaults       :直接子组件中的默认配置fieldDefaults:   后代组件中的默认配置 相同点:组件自己的配置中指定的值优先

  3. javascript中加号(+)操作符的作用

    // 16进制转换:+”0xFF”;              // -> 255 // 获取当前的时间戳,相当于`new Date().getTime()`:+new Date(); // 比 ...

  4. Python mysql 创建连接

    安装 pymysql 模块 pip3 install pymysql # python2, 默认无 pip 命令 # python3, 默认自带 pip3 命令 mysql基本操作 # 导入 pymy ...

  5. Session过期,跳出iframe框架页显示会话过期页面

    web开发中经常会有这种情况,在一个主页面中包含侧边导航菜单和iframe,点击菜单项,对应页面会在iframe中显示,整个页面不会刷新.但是如果设置了会话Session,在会话过期后再操作会自动re ...

  6. Django之初识Ajax

    1.简介 AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步的Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传输的数据 ...

  7. iphone投屏电脑 苹果x用无线充电好不好

    众所周知,苹果新发布的iPhone 8和iPhone X支持无线充电功能,简单说就是在充电时用户只需把它们放到充电板上即可,不再需要插入Lightning线缆.而且如今iphone投屏电脑也是比较受欢 ...

  8. java Web三大组件--监听器

    监听器概述 监听器(Listener)是一种特殊的Servlet技术,它可以监听Web应用的上下文信息.Servlet请求信息和Servlet会话信息,即ServletContext.ServletR ...

  9. Android Studio Git 分支使用实践

    新公司有些项目是用的 Git,以前公司都是 svn,为了练手 Git,我个人 APP 用到了,但是仅简单的 git pull/push 的使用,并未用到 Git 精髓,只有当项目中用到,才会紧迫去全面 ...

  10. ERP按序打印问题

    按序打印只适合一个机器,不适合主副机模式,主副机模式请勾选同时打印 如果开启主副机模式勾选了按序打印,会造成副机下厨后厨不出单