ch02 课下作业
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 课下作业的更多相关文章
- 2018-2019-1 20165205 ch02 课下作业
ch02 课下作业 2.96 代码 #include <stdio.h> #include <stdlib.h> typedef unsigned float_bits; fl ...
- 20165302 ch02 课下作业
20165302 ch02 课下作业 作业内容 补充完成课上测试(不能只有截图,要有分析,问题解决过程,新学到的知识点) 完成教材 p97 2.96 2.97,要有完备的测试 发一篇相关内容的博客, ...
- 20155212 ch02 课下作业
20155212 ch02 课下作业 T1 题目 参考附图代码,编写一个程序 "week0601学号.c",判断一下你的电脑是大端还是小端 相关知识 小端法:最低有效字节在最前面 ...
- 2018-2019-1 20165330 《信息安全系统设计基础》第六周课上测试ch02&课下作业
课上测试 测试-3-ch02 任务详情 编写一个程序 "week0203学号.c",运行下面代码: 1 short int v = -学号后四位 2 unsigned short ...
- 20165311 ch02 课下作业
补充完成课上测试(不能只有截图,要有分析,问题解决过程,新学到的知识点) 完成教材 p97 2.96 2.97,要有完备的
- 20155331 ch02 课下作业
2.96 遵循位级浮点编码规则,实现具有如下原型的函数: /* *Compute (int)f. *If conversion cause overflow or f is NaN, return 0 ...
- 20155338 ch02 ch03课下作业
20155338 ch02 ch03课下作业 要求: 1.补充完成课上测试(不能只有截图,要有分析,问题解决过程,新学到的知识点) 课上测试-3-ch02 1.编写一个程序 "week060 ...
- 20175221 MyCP(课下作业,必做)
MyCP(课下作业,必做) 任务详情 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: - java MyCP -tx XXX1.txt XXX2 ...
- 20175221 《Java程序设计》迭代和JDB(课下作业,选做):
20175221 <Java程序设计> 迭代和JDB(课下作业,选做): 任务详情 1 使用C(n,m)=C(n-1,m-1)+C(n-1,m)公式进行递归编程实现求组合数C(m,n)的功 ...
随机推荐
- 20145326蔡馨熤《网络对抗》—— Web基础
20145326蔡馨熤<网络对抗>—— Web基础 1.实验后回答问题 (1)什么是表单. 表单是一个包含表单元素的区域,表单元素是允许用户在表单中输入信息的元素,表单在网页中主要负责数据 ...
- Linux下查看网卡驱动和版本信息
Linux下查看网卡驱动和版本信息 查看网卡生产厂商和信号 查看基本信息:lspci 查看详细信息:lspci -vvv # 3个小写的v 查看网卡信息:lspci | grep Ethernet 查 ...
- C# asp:FileUpload上传文件使用JS实现预览效果
js代码: <script type="text/javascript"> //下面用于图片上传预览功能 function setImagePreview() { va ...
- CSS的初了解(更新中···)
在前面,我们学习了html的结构.基本骨架.起名方式和选择器,接下来,我们就要学习CSS了. 首先,我们要知道CSS是什么. CSS 全称叫层叠样式表,作用是给html添加样式style,添加属性. ...
- java 之 schema解析
一,schema约束 *dtd语法:<ELEMENT 元素名 约束> *schema符合xml的语法,xml语句 **一个xml中可以有多个schema,多个schema使用名称空间区分( ...
- synchronized 关键字如何使用
http://blog.csdn.net/shenshibaoma/article/details/53009505 http://www.importnew.com/20444.html 锁一般分为 ...
- 论文笔记之:SeqGAN: Sequence generative adversarial nets with policy gradient
SeqGAN: Sequence generative adversarial nets with policy gradient AAAI-2017 Introduction : 产生序列模拟数 ...
- HDU 5069 Harry And Biological Teacher(AC自动机+线段树)
题意 给定 \(n\) 个字符串,\(m\) 个询问,每次询问 \(a\) 字符串的后缀和 \(b\) 字符串的前缀最多能匹配多长. \(1\leq n,m \leq 10^5\) 思路 多串匹配,考 ...
- 说明Heap与stack的差别。
Heap 是堆,Stack 是栈. 栈与堆都是Java用来在Ram中存放数据的地方,与C++不同,Java会自动管理栈与堆,程序员不能直接设置栈与堆. Java的堆是一个运行时的数据区,类的对象从中分 ...
- PS与PL协同设计
https://blog.csdn.net/Fei_Yang_YF/article/details/79676172 什么是PS和PL ZYNQ-7000是Xilinx推出的一款全可编程片上系统(Al ...