浮点数0.5f的偶数舍入运算实现
深入理解计算机系统 家庭作业 2.93
最新推荐文章于 2021-05-18 00:34:48 发布

fengjingge 于 2014-04-28 13:07:05 发布
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
实现浮点数 0.5f,运行成功,特别是要注意舍入运算,是偶数舍入!
#include <stdio.h>
typedef unsigned float_bits;
typedef unsigned char *byte_pointer;
void show_bytes(byte_pointer start,int len)
{
int i;
for(i = 0;i < len;i++)
{
printf(" %.2x",start[i]);
}
printf("n");
}
void show_float(float x)
{
show_bytes((byte_pointer) &x,sizeof(float));
}
float_bits float_half(float_bits f)
{
unsigned sign = f>>31;
unsigned exp = f>>23&0xff;
unsigned frac = f&0x7fffff;
if(exp == 0xff)
return f;
if(exp == 0)
{
if ((frac & 0x00000001) == 1)
{
if ((frac & 0x00000002) == 0x00000002)
frac = (frac + 1) >> 1;
else
frac = frac >> 1;
}
else
{
frac = frac >> 1;
}
}
if(exp == 1)
{
exp = exp - 1;
if ((frac & 0x00000001) == 1)
{
if ((frac & 0x00000002) == 0x00000002)
frac = (frac + 1) >> 1;
else
frac = frac >> 1;
}
else
{
frac = frac >> 1;
}
frac = frac + (1 << 22);
}
if(exp > 1)
{
exp = exp - 1;
}
return (sign<<31) | (exp<<23) | frac;
}
int main()
{
unsigned u,ur;
float f,fr;
for(u=8388607;u<=0x0fffffffu;u++)
{
f =*((float *)&u);
f=f*0.5;
ur = float_half(u);
fr = *((float *)&ur);
if(fr == f)
printf("%u: %x %x okn",u,f,fr);
else
{
printf("%u: errorn",u);
printf("the f is n");
show_float(f);
printf("th fr is %n");
show_float(fr);
printf("%x %xn",f,fr);
return -1;
}
}
return 0;
}
相关知识
c语言中%运算符的运算对象,C语言中运算对象必须是整型的运算符是()。A.%=B./C.=D.......
0.5f==0.5 0.3f==0.3
N点DFT,用FFT快速算法实现。.ppt
在运算指令中,形式为#i=ASIN[#j]的函数表示的意义是( &
c语言实现玫瑰花(代码)
位运算
【Python】(二)数据类型与转换
js中的0.1+0.2!==0.3
特殊的数独身数,:水仙花数, 四叶玫瑰数, 五角星数, 六合数 ,北斗七星数, 八仙数, 九九重阳数 ,十全十美数...
SVM实现鸢尾花分类
原文链接: 浮点数0.5f的偶数舍入运算实现 https://www.huajiangbk.com/newsview837388.html
| 上一篇: 祝福家庭美满的话语180句 | 下一篇: 祝哥哥嫂子乔迁之喜贺词(精选65... |





