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. 通过示例学习JavaScript闭包

    译者按: 在上一篇博客,我们通过实现一个计数器,了解了如何使用闭包(Closure),这篇博客将提供一些代码示例,帮助大家理解闭包. 原文: JavaScript Closures for Dummi ...

  2. K8S Calico

    NetworkPolicy是kubernetes对pod的隔离手段,是宿主机上的一系列iptables规则. Egress 表示出站流量,就是pod作为客户端访问外部服务,pod地址作为源地址.策略可 ...

  3. 洛谷P4462 [CQOI2018]异或序列(莫队)

    题意 题目链接 Sol 一开始以为K每次都是给出的想了半天不会做. 然而发现读错题了维护个前缀异或和然后直接莫队搞就行,. #include<bits/stdc++.h> #define ...

  4. jQuery计算文本宽度和input标签根据输入字符动态自适应宽度的实现

    jQuery计算文本宽度的原理是利用html提供的<pre>标签,向dom中动态添加<pre>标签,标签里的内容就是要测试长度的文本,获取完长度之后再删除刚才添加的<pr ...

  5. Android为TV端助力 转载自jguangyou的博客,XML基本属性大全

    android:layout_width 指定组件布局宽度 android:layout_height 指定组件布局高度 android:alpha 设置组件透明度 android:backgroun ...

  6. ChakraCore/JSRT使用问题汇总

    QQ交流群:523723780(ChakraCore) ChakraCore是什么? 一个微软开源的,用于Windows IE/Edge内核的高效JS脚本引擎. 前不久微软开源了ChakraCore, ...

  7. mui 常见的效果

    上传图片,预览图片: <!--upload--> <div id="feedback" class="mui-page feedback"&g ...

  8. mysql数据的基本操作

    本文内容: 插入数据: 查询数据 修改数据 删除数据 首发日期:2018-04-11 插入数据: 给所有字段插入数据: 插入单条记录:insert into 表名 values(值列表); 插入多条记 ...

  9. Android Thread 官方说明

    Thread官方说明 https://developer.android.google.cn/reference/java/lang/Thread Thread是程序中执行的线程.Java虚拟机允许应 ...

  10. HDU 1086

    You can Solve a Geometry Problem too Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/3 ...