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. Java高并发--线程安全策略

    Java高并发--线程安全策略 主要是学习慕课网实战视频<Java并发编程入门与高并发面试>的笔记 不可变对象 发布不可变对象可保证线程安全. 实现不可变对象有哪些要注意的地方?比如JDK ...

  2. 人类阅读的优越方式打印php数组

    在程序开发过程中:打印数据进行查看调试是非常频繁的:如果没有一种易于阅读的样式那是相当痛苦的:先定义一个数组: $array=array( 't0'=>'test0', 't1'=>'te ...

  3. JS函数浅析(一)

    1.万物皆为对象 提起函数首先要知道对象,而对象又是js数据类型中的一种,所以我们从头开始. 1)javascript数据类型有哪些?          原始数据类型:number,undefined ...

  4. wx-charts 微信小程序图表 -- radarChart C# .net .ashx 测试

    radarChart:原始代码 new wxCharts({ canvasId: 'radarCanvas', type: 'radar', categories: ['1', '2', '3', ' ...

  5. bootstrap源码之滚动监听组件scrollspy.js详解

    其实滚动监听使用的情况还是很多的,比如导航居于右侧,当主题内容滚动某一块的时候,右侧导航对应的要高亮. 实现功能 1.当滚动区域内设置的hashkey距离顶点到有效位置时,就关联设置其导航上的指定项 ...

  6. HTML琐碎知识点(持续补充)

    一.table标签 <table> <thead> <tr> <th>111</th> </tr> </thead> ...

  7. Android项目实战(五十一):浅谈GreenDao

    比较出名的数据库框架 GreenDao使用步骤: 1.app目录下的build.gradle文件 添加依赖 compile 'org.greenrobot:greendao:3.2.0' 顶部添加插件 ...

  8. c++趣味之返回void

    void a(){} void b(){return a();} int main() { b(); ; } 这个是能编译的(vs,gcc),void函数是能返回,一般不会这么写,但是这样确实可以.你 ...

  9. 应用生命周期终极 DevOps 工具包

    [编者按]本文作者为 Kevin Goldberg,主要介绍了在开发.运营应用的完整生命周期当中,可能用到的 DevOps 工具大集合.文章系 OneAPM 工程师编译整理. DevOps工具包中合适 ...

  10. mysql中导入导出sql文件

    1.导出整个数据库: mysqldump -u用户名 -p密码 数据库名 > 导出的文件名 例:mysqldump -uroot -proot user > user.sql 2.导出一个 ...