2.96遵循位级浮点编码规则,实现具有如下原型的函数:

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

对于浮点数f,这个函数计算(int)f。如果f是NaN,你的函数应该向零舍人。如果f不能用整数表示(例如,超出表示范围,或者它是一个NaN),那么函数应该返回。x800000000测试你的函数,对参数f可以取的所有2^32个值求值,将结果与你使用机器的浮点运算得到的结果相比较。

代码:

#include <stdio.h>

typedef unsigned float_bits;

int float_f2i(float_bits f){
unsigned sign, exp, frac, last_bit;
int i;
sign = f >> 31;
exp = (f >> 23) & 0xff;
frac = f & 0x7fffff;
if (exp == 158 && frac == 0 && sign == 1)
i = 0x80000000;
else if (exp > 157 || exp == 0xff)
i = 0x80000000;
else if (exp < 126)
i = 0;
else{
exp -= 127;
frac |= 0x800000;
if (exp > 23){
exp -= 23;
frac <<= exp;
}else if (exp < 23){
exp = 23 - exp;
frac >>= exp;
}
if (sign == 1)
i = (~frac) + 1;
else
i = frac;
}
return i;
}
void main(){
float f;
unsigned i;
int j, k; for (i = 0x3fbfff70U; i <= 0xffffffffU; i++)
{
f = *(float *)&i;
j = (int)f;
k = float_f2i(i);
printf("原值:%f \t 机器运算:%d \t 函数运算:%d\n", f, j, k);
}
}

运行结果:

2.97

遵循位级浮点编码规则,实现具有如下原型的函数:

/*Compute (float) i*/
float bits float_i2f(int i);

对于函数i,这个函数计算(float) i的位级表示。

测试你的函数,对参数f可以取的所有2^32个值求值,将结果与你使用机器的浮点运算得到的

结果相比较。

代码:

#include <stdio.h>

typedef unsigned float_bits;
typedef unsigned char *byte_pointer; void show_bytes(byte_pointer start, size_t len) {
size_t i;
for(i=0; i<len; i++)
printf(" %.2x", start[i]);
printf("\t");
} float_bits float_i2f(int x) {
unsigned shiftLeft=0;
unsigned afterShift, tmp, flag;
unsigned absX=x;
unsigned sign=0;
if (x==0)
return 0;
if (x<0){
sign=0x80000000;
absX=-x;
}
afterShift=absX;
while (1){
tmp=afterShift;
afterShift<<=1;
shiftLeft++;
if (tmp & 0x80000000)
break;
}
if ((afterShift & 0x01ff)>0x0100)
flag=1;
else if ((afterShift & 0x03ff)==0x0300)
flag=1;
else
flag=0;
return sign+(afterShift>>9)+((159-shiftLeft)<<23)+flag;
} void main(){
int x;
unsigned i,k;
float j; for (i = 0x3fbfff70U; i <= 0xffffffffU; i++){
x = *(int *)&i;
printf("原值:");
show_bytes((byte_pointer) &x, sizeof(int));
j=(float)i;
printf("机器运算:");
show_bytes((byte_pointer) &j, sizeof(float));
k=float_i2f(i);
printf("函数运算:");
show_bytes((byte_pointer) &k, sizeof(unsigned));
printf("\n");
}
}

运行结果:

ch02 课下作业的更多相关文章

  1. 2018-2019-1 20165205 ch02 课下作业

    ch02 课下作业 2.96 代码 #include <stdio.h> #include <stdlib.h> typedef unsigned float_bits; fl ...

  2. 20165302 ch02 课下作业

    20165302 ch02 课下作业 作业内容 补充完成课上测试(不能只有截图,要有分析,问题解决过程,新学到的知识点) 完成教材 p97 2.96 2.97,要有完备的测试 发一篇相关内容的博客, ...

  3. 20155212 ch02 课下作业

    20155212 ch02 课下作业 T1 题目 参考附图代码,编写一个程序 "week0601学号.c",判断一下你的电脑是大端还是小端 相关知识 小端法:最低有效字节在最前面 ...

  4. 2018-2019-1 20165330 《信息安全系统设计基础》第六周课上测试ch02&课下作业

    课上测试 测试-3-ch02 任务详情 编写一个程序 "week0203学号.c",运行下面代码: 1 short int v = -学号后四位 2 unsigned short ...

  5. 20165311 ch02 课下作业

    补充完成课上测试(不能只有截图,要有分析,问题解决过程,新学到的知识点) 完成教材 p97 2.96 2.97,要有完备的

  6. 20155331 ch02 课下作业

    2.96 遵循位级浮点编码规则,实现具有如下原型的函数: /* *Compute (int)f. *If conversion cause overflow or f is NaN, return 0 ...

  7. 20155338 ch02 ch03课下作业

    20155338 ch02 ch03课下作业 要求: 1.补充完成课上测试(不能只有截图,要有分析,问题解决过程,新学到的知识点) 课上测试-3-ch02 1.编写一个程序 "week060 ...

  8. 20175221 MyCP(课下作业,必做)

    MyCP(课下作业,必做) 任务详情 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: - java MyCP -tx XXX1.txt XXX2 ...

  9. 20175221 《Java程序设计》迭代和JDB(课下作业,选做):

    20175221 <Java程序设计> 迭代和JDB(课下作业,选做): 任务详情 1 使用C(n,m)=C(n-1,m-1)+C(n-1,m)公式进行递归编程实现求组合数C(m,n)的功 ...

随机推荐

  1. 20165211 2017-2018-2 《Java程序设计》课程总结

    20165211 2017-2018-2 <Java程序设计>课程总结 一.每周作业及实验报告博客链接汇总 预备作业1:我期望的师生关系 预备作业2:学习基础和C语言调查 预备作业3:Li ...

  2. Codeforces 833A The Meaningless Game - 数论 - 牛顿迭代法 - 二分法

    Slastyona and her loyal dog Pushok are playing a meaningless game that is indeed very interesting. T ...

  3. eval()、exec()与execfile()

    eval(expression[, globals[, locals]]) eval()函数执行一个python表达式字符串并返回表达式执行后的结果: >>> x = 1 >& ...

  4. 安装jumpserver

    Centos7.5 安装jumpserver 同步服务器时间 #下载 [root@jumpserver ~]# yum install ntpdate -y #同步时间 [root@jumpserve ...

  5. python --- 11 第一类对象 函数名 闭包 迭代器

    一 .函数名的运用    ①函数名是⼀个变量, 但它是⼀个特殊的变量, 与括号配合可以执⾏函数的变量 ②函数名是一个内存地址    ③ 函数名可以赋值给其他变量         ④函数名可以当做容器类 ...

  6. 利用sqlmap对网站进行sql注入检测

    1.下载sqlmap github地址:https://github.com/sqlmapproject/sqlmap/zipball/master 2.sqlmap的运行环境需要python,这个网 ...

  7. Android中activity的四个启动模式

    activity的四个启动方式分别是standard.singletop.singletask.singleinstance.第一个其实就是只要新打开活动就会新建一个实例.第二个顾名思义返回栈的顶部只 ...

  8. 2015,3,10 1(南阳理工ACM)

    描述输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符.   输入 第一行输入一个数N,表示有N组测试数据.后面的N行输入多组数据,每组输入数据都是占一行,有三个字符组成, ...

  9. 【Dalston】【第二章】客户端负载均衡(Ribbon)

    对于大型应用系统负载均衡(LB:Load Balancing)是首要被解决一个问题.在微服务之前LB方案主要是集中式负载均衡方案,在服务消费者和服务提供者之间又一个独立的LB,LB通常是专门的硬件,如 ...

  10. 用C#.NET调用Java开发的WebService传递int,double问题,出现java无法获得值!

    https://www.cnblogs.com/zhbsh/archive/2013/04/22/3035477.html 用C#.NET调用Java开发的WebService时,先在客户端封装的带有 ...