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. python基础学习(三)变量和类型

    变量的作用:变量就是用来存储数据的. 变量的定义 在python中,变量在使用之前需要进行赋值,变量只有赋值后才能使用,如果变量没有赋值就使用会出现什么情况呢?如下图,使用之前变量未定义,会报错,如下 ...

  2. css选择器优选级及匹配原理(转)

    作为一个Web开发者,掌握必要的前台技术也是很重要的,特别是在遇到一些实际问题的时候.这里给大家列举一个例子: 给一个p标签增加一个类(class),可是执行后该class中的有些属性并没有起作用.通 ...

  3. Java中枚举的使用

    Java中枚举其实就是静态常量,今天发现枚举里面其实还能加方法,学习了下, 代码如下: package org.pine.test; import java.util.HashMap; import ...

  4. osx安装sass

    1.安装ruby (1)OS X 缺少的套件管理工具 homebrew 的安装 http://brew.sh/index_zh-tw.html (2)通过homebrew安装ruby // 到文件夹 ...

  5. Locust 安装

    环境:CentOS 7.4,python2.7.5 # 安装 pip yum -y install python-pip # 安装 locustio pip install locustio mkdi ...

  6. 小tips:JS语法之标签(label)

    JavaScript语言允许,语句的前面有标签(label),相当于定位符,用于跳转到程序的任意位置,标签的格式如下. label: statement 标签可以是任意的标识符,但是不能是保留字,语句 ...

  7. C#基础(204)--对象初始化器,基本数据类型与引用数据类型特点总结,ref,out关键字的使用

    对象初始化器: 对象在创建过程中也可以使用对象初始化器完成“属性的初始化” Student stu =new Student(){ StudentId=, StudentName="张三&q ...

  8. meta、link、script的常用写法

    meta 设置编码格式 <meta charset='utf-8'> 设置关键字 <meta name="keywords" content="音乐 播 ...

  9. 【转载】java架构师进阶之路

    Java架构师,应该算是一些Java程序员们的一个职业目标了吧.很多码农码了五六年的代码也没能成为架构师.那成为Java架构师要掌握哪些技术呢,总体来说呢,有两方面,一个是基础技术,另一个就是组织能力 ...

  10. vue缓存页面【二】

    keep-alive是vue内置的一个组件,可以使被它包含的组件处于保留状态,或避免被重新渲染. 用法:运行结果描述:input输入框内,路由切换输入框内部的内容不会发生改变.在keep-alive标 ...