Week6课下作业

课本练习p2.96 p2.97

浮点数

  1. float 单精度浮点数(32位)
  2. double 双精度浮点数(64位)
  • 练习对应书上内容P78--P81页

知识点是IEEE浮点表示


  1. 符号(sign):s决定这个数是负数(s=1)还是正数(s=0),而对于数值0的符号位解释做特殊情况处理。

  2. 尾数(significand):M是一个二进制小数,它的范围是,或者是。

  3. 阶码(exponent):E的作用是对浮点数加权,这个权重是2的E次冪(可能是负数)。

对于float而言,符号位用1位表示,尾数M用8位表示,阶码E用23位表示。而对于double而言,符号位1位,尾数11位,阶码52位

文字描述可能有些不太好理解,配上书本p78页的图就可以更好地理解。

题目要求

/*
*Compute (int)f.
*If conversion causes overflow or f is NaN,return 0x80000000 
*/
int float_f2i(float _bits f);

对于浮点数f,这个函数计算(int)f.如果f是NaN,向0舍入。如果f不能用整数表示,那么函数应该返回0x80000000.

  1. 对于浮点数f,这个函数计算(float)f的位级表示.
/*Compute (float)i*/
float_bits float_i2f(int i);

课上练习1

课上练习2

课上练习3

课上练习4

遇见的问题

  • 课上做实践的时候被段地址已转储。
  • 课下做实验楼的时候段错误

解决和学习。

首先明白段错误的定义;段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址、访问了系统保护的内存地址、访问了只读的内存地址等等情况。
根据定义回头看自己的代码。发现应该是字符串复制哪里出现了问题。
-还有那些情况会出现段错误(核心已转储)的错误呢。在网上学习找到了相关博客,并进行学习。

  1. 访问不存在的内存地址
  2. 访问系统保护的内存地址
  3. 访问只读的内存地址
  4. 栈溢出

段错误的调试方法

  1. 使用printf输出信息
  2. 使用gcc gdb

段错误参考资料

浮点数编码参考资料 建议和书上的P78页的图对应学习

posted @ 2017-10-29 23:08  20155329胡佩伦  阅读(194)  评论(0编辑  收藏  举报