#include <stdio.h>
typedef unsigned float_bits;
float_bits float_twice(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 += frac << 1 >>23;
frac = (frac<<1);
}
else if(exp != 0xff)
++exp;
if(exp == 0xff)
frac = 0;
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*2.0;
ur = float_twice(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.94
最新推荐文章于 2024-04-07 11:10:13 发布
