信息的表示和处理(4)

2.4 浮点数

浮点数对于设计非常大的数字以及非常接近0数字有很大的意义, 但最早的浮点数并没有一个统一的标准, 之后IEEE 754的标准出现了, 该标准直到现在还在使用, 我们接下来要将的就是IEEE标准中的浮点格式... 因为这一部分我大一上学期的时候学过一些, 所以可能会比较简略...

2.41 二进制小数

当然你会发现我们并没有办法表示一些不由二的幂的和组成的小数( 比如三分之一), 我们只能通过增加二进制的长度来提高精度.

2.42 IEEE浮点表示

书上这一段讲的很好, 我就不表了, 直接抄书了 :

2.43 数字实例

这几节别怪我图我, 真的, 自己说很难说清楚, 书上图文并茂很好理解...

图有问题(菱形表示的应该是非规格化的值), 非规格化的值特别适合来表示十分接近0的数, 而特殊值用来表示无穷...

感觉这一部分重点在于了解浮点数的机器表示, 只要清楚转换规则, 能完成浮点数与十进制小数的转换就行了... 另外还有一点, 学到这里我们可以看到整数与浮点数的联系了...

2.44 舍入

舍入这里默认的是向偶数舍入, 也称之为最接近舍入, 个人认为书这个地方的阐述是很有问题, 是书中为数不多的败笔之一(别和我说英文版, 我英文版也看了, 一样有歧义)... 这个舍入其实很简单, 比如我们想要把一个浮点数舍入为整数, 比如说对于1.1, 我们肯定会得到结果1, 这种情况下叫做最近舍入, 如果碰到1.5, 那么它距离1和2一样的话, 这时候就要考虑偶数舍入, 也就是说如果不是这种和两边的边界都距离相同的情况下, 只需要最近舍入就行了...(二进制而言0是偶数) 其他三种向0, 向上 或者向下舍入就不多说了...

2.4.5 浮点运算

IEEE标准使用了简单的规则用来确定. 浮点单元设计者使用了一些技巧来避免精确的计算, 只保证必要的正确舍入, 同时对参数中带特殊值得浮点数运算定义了更合理的规则, 比如1除以0得到正无穷等等... 同时, 正因为引入了舍入机制, 浮点数的计算是可交换而不可以结合的(符合交换律而不符合结合律)... 比如 x + y 一定等于 y + x, 但是 (3.14 + le10) - le10 和 3.14 + (le10 - le10) 的结果分别是 0 和 3.14...

正因为浮点数的加法不符合结合律, 这对于编译器的编写会造成一些影响.

比如对下列浮点数的运算 :

x = a + b + c;

y = b + c + d;

编译器如果希望减少一次浮点数加法而进行如下优化 :

t = b + c;

x = a + t;

y = t + d;

那么结果就可能会不同, 所以编译器会尽量避免这种功能产生影响的优化...(写编译器的时候要记住啊...)

同时浮点数加法满足单调性 : 比如 a >= b, 那么对于任何a, b, x(NaN不算), 都有 x + a >= x + b... (整数运算会溢出, 所以不满足)...

浮点数乘法同样具有交换性和单调性但是不具有结合性, 同时也没有分配性... (这些东西感觉也记不住, 只要以后想到在博客里面记了再过来查就行了)

2.46 C语言中的浮点数

C语言的标准中并没有规定浮点数必须使用IEEE标准, 但是一般用float, double对于IEEE中的单精度和双精度浮点数, 对于无穷这样的, 一般在头文件中定义, 不同的系统平台不一样... 这里给出一些C语言中int, float, double的转换规则 :

对于练习题 2.54 :

A : 对(要记住一点, int 和 float 转 double 无丢失) ...

B : 错误 (某些较大的int 虽然float可以表示的范围足够, 但是往往精度不足)

C : 错误

D : 对

E : 正确

F : 正确

G : 正确 (记住浮点数溢出不像整数, 这个式子最多也就溢出到正无穷)

H : 如果 (记住如果有一个数接近极限, 那么与它做加法的结果就是某个数直接被舍去, 比如当 f 很大, 而 d = 1.0, 那么 f + d 就是 f, f - f 等于 0. 0 , 而右边等于 1.0)

2.5 小结

我自己来总结一下, 这一章其实就两点 :

1. 整数以及整数的溢出...

  1. 加法运算的溢出问题

    1. 无符号数发生溢出, 结果小于任何一个数

    2. 补码数发生溢出, 要么两正的一负, 要么两负的一正.

  2. 乘法运算的溢出问题

    结果超过了32位就溢出, 没有规律可循.

  3. 无论溢出与否, 符合交换律, 结合律, 分配律.

2. 浮点数以及浮点数的舍入与溢出...

  1. 浮点数的表示符合IEEE 标准...

  2. 浮点数默认向近向偶舍入

  3. 浮点数很大时向正无穷溢出, 很小时向负无穷溢出, 接近0时向0溢出.

  4. 由于舍入的存在, 导致浮点数运算不符合分配律和结合律, 只符合交换律和单调性, 这一点要特别小心.

家庭作业作业没有答案,现在只想快点进入第三章汇编, 就不写了...

时间: 2024-10-20 21:16:19

信息的表示和处理(4)的相关文章

基于位置信息的聚类算法介绍及模型选择

百度百科 聚类:将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类.由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异."物以类聚,人以群分",在自然科学和社会科学中,存在着大量的分类问题.聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法.聚类分析起源于分类学,但是聚类不等于分类.聚类与分类的不同在于,聚类所要求划分的类是未知的. 分类和聚类算法一直以来都是数据挖掘,机器学习领域的热门课题,因此产生了众多的

查看Linux系统版本信息

一.查看Linux内核版本命令(两种方法): 1.cat /proc/version [[email protected]CentOS home]# cat /proc/versionLinux version 2.6.32-431.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Fri Nov 22 03:15:09 UTC 2013 2.uname -a [

java微信授权获取OPENID,ACCESS_TOKEN,用户信息

获取微信的openId流程 1.获取微信code 使用接口 : appId 是当前开发者的appId 不是用户的  path  是回调地址 这个链接是授权链接,当重定向这个链接的时候,会展示授权页,点击授权之后 跳入你path的请求接口    回调中带了一个参数code获取到就行 https://open.weixin.qq.com/connect/oauth2/authorize?appid="+appId+"&redirect_uri="+path+"&

理解信息管理系统

1.信息与数据的区别是什么? 数据是记录客观事物,可鉴别的符号,而信息是具有关联性和目的性的结构化,组织化的数据.数据经过处理仍是数据,而信息经过加工可以形成知识.处理数据是为了便于更好的解释,只有经过解释,数据才有意义,才可以成为信息.可以说信息是经过加工以后,对客观世界产生影响的数据. 2.信息与知识的区别是什么? 信息是具有关联性和目的性的结构化,组织化的数据,知识是对信息的进一步加工和应用,是对事物内在规律和原理的认识.信息经过加工可以形成知识. 3.举一个同一主题不同级别的数据.信息.

调试信息的完成

gdb中-x是为了实现通过文件的初始化gdb GAS(gcc)(AT&T 语法),NASM(Intel 语法) 当boot loader 引导操作系统的时候,机器必须有如下的状态: EAX: 必须包含魔数OX2BADB002,这个值告诉操作系统目前它是由兼容的Multiboot 的boot loader 引导的. EBX: 必须包含boot loader 提供的多重引导信息结构(见3.3 节多重信息引导结构)的32位物理地址. CS: 必须是32 位的读/执行的代码段,偏移是0 以及界限是 0X

20145225 《信息安全系统设计基础》期中总结

期中总结 一.常用命令总结 man -k: 常用来搜索,结合管道使用.例句如下: man -k k1 | grep k2 | grep 2 搜索同时含有k1和k2,且属于系统调用. 最后的数字意味着帮助手册中的区段,man手册共有8个区段,最常用的是123,含义如下: 1.Linux 2.系统调用 3.c语言 但是当单独用man语句的时候,想查看其中的单独某个区段内的解释时,用法是这样的: man 3 printf 即查找c语言中printf的用法. grep -nr 这条语句可以用来查找关键字

20145336张子扬 《信息安全系统设计基础》第7周学习总结

20145336张子扬 <信息安全系统设计基础>第1周学习总结 教材学习内容总结 学习目标: 了解常见的存储技术(RAM.ROM.磁盘.固态硬盘等) 理解局部性原理 理解缓存思想 理解局部性原理和缓存思想在存储层次结构中的应用 高速缓存的原理和应用 三种常见存储技术:RAM.ROM和磁盘 随机访问存储器RAM分为静态RAM(SRAM)和动态RAM(DRAM) SRAM 用来作为高速缓存储存器,SRAM将每个位存储在一个双稳态的存储器单元里,每个单元是用一个六晶体管电路来实现的.它可以无限制地保

小白日记8:kali渗透测试之主动信息收集(二)三层发现:ping、traceroute、scapy、nmap、fping、Hping

三层发现 三层协议有:IP以及ICMP协议(internet管理协议).icmp的作用是用来实现intenet管理的,进行路径的发现,网路通信情况,或者目标主机的状态:在三层发现中主要使用icmp协议,arp协议属于二层协议,它是基于广播的,所以不可路由.而ICMP协议是可以路由的,理论上可以使用icmp协议发现全球的ip,如果没有边界防火墙(禁止icmp的探测包)进行过滤的话,对目标主机进行扫描,则会收到相应的响应,从而进行捕捉[有边界防火墙的现象比较普遍],但是三层发现的扫描速度也较二层要慢

20145317《信息安全系统设计基础》第六周学习总结(1)

20145317<信息安全系统设计基础>第六周学习总结(1) 第四章 处理器体系结构 指令体系结构:一个处理器支持的指令和指令的字节级编码 4.1Y86指令集体系结构 Y86:包括定义各种状态元素.指令集和它们的编码.一组编程规范和异常事件处理. Y86程序中的每条指令都会读取或修改处理器状态的某些部分.Y86具体包括:8个程序寄存器.3个条件码ZF\SF\OF.程序计数器(PC) Y86用虚拟地址引用存储器位置. 程序状态的最后一个部分是状态码Stat,它表明程序执行的总体状态. 注意:条件

20145239 《信息安全系统设计基础》第5周学习总结

20145239<信息安全系统设计基础>第5周学习总结 教材学习内容 x86寻址方式 DOS时代的平坦模式,不区分用户空间和内核空间,很不安全 8086的分段模式 IA32的带保护模式的平坦模式 机器级编程的两种抽象 -ISA(Instruction set architecture).ISA简单来说就是指令集体系结构.定义了处理机状态,指令格式以及指令对状态的影响.-机器级使用的存储器地址是虚拟地址. 机器代码中的处理机状态 程序计数器(PC)表示将要执行的下一条指令在存储器中的地址. 整数