csapp2e 家庭作业 2.94

本文介绍了一个通过操作浮点数内部表示来实现数值翻倍的C语言函数。该函数通过对IEEE 754标准下浮点数的位操作完成翻倍任务,适用于理解浮点数运算原理及底层表示。
#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;
   }
 
 }
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值