#include <stdio.h>
typedef unsigned float_bits;
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)
{
--exp;
if(exp == 0)
frac+=1<<23;
}
if(exp ==0)
{
if((frac&0x3)==0x3)
frac=(frac>>1)+1;
else
frac>>=1;
}
return (sign<<31)|(exp<<23)|frac;
}
int main()
{
unsigned u,ur;
float f,fr;
for(u=0;u<=0xffffffffu;u++)
{
f =*((float *)&u);
f=f*0.5;
ur = float_half(u);
fr = *((float *)&ur);
if(fr == f)
printf("%u: %x %x ok\n",u,f,fr);
else
{
printf("%u: error\n",u);
printf("%x %x\n",f,fr);
return -1;
}
}
}
csapp2e 家庭作业 2.93
最新推荐文章于 2025-05-30 15:40:59 发布
