Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1412113
  • 博文数量: 143
  • 博客积分: 10005
  • 博客等级: 上将
  • 技术积分: 1535
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-23 17:25
个人简介

淡泊明志 宁静致远

文章分类

全部博文(143)

文章存档

2011年(2)

2009年(1)

2007年(22)

2006年(118)

我的朋友

分类: C/C++

2006-12-08 10:07:20

C语言库函数源代码】

【本程序在Dev C++ 4.9.9.2 下编译通过】

/*

   装载浮点数,v是尾数,e为指数。

   如:x=ldexp(1.0,6);则表示要转载的浮点数是1.0*2^6

*/

double my_ldexp01(double v, int e)

{

   double two = 2.0;

   if (e < 0)

   {

      e = -e; /*这句话和后面的if语句是用来对两位溢出码的机器*/

      if (e < 0) return 0.0;

      while (e > 0)

      {

        if (e & 1) v /= two;

        two *= two;

         e >>= 1;

      }

   }

   else if (e > 0)

   {

      while (e > 0)

      {

        if (e & 1) v *= two;

        two *= two;

        e >>= 1;

      }

   }

   return v;

}

double my_ldexp02(double v, int e)

{

   double temp1, texp, temp2;

   texp = e;

   __asm__(

      "fscale "

      : "=u" (temp2), "=t" (temp1)

      : "0" (texp), "1" (v)

   );

   return (temp1);

}

main()

{

   float x,y;

  

   y = 1.0;

   x=my_ldexp01(y,6);  // 1.0*2^6

   printf("2^6=%.2f\n",x);

   x=my_ldexp01(-y,6);  // 1.0*2^6

   printf("2^6=%.2f\n",x);

   x=my_ldexp02(y,6);  // 1.0*2^6

   printf("2^6=%.2f\n",x);

   x=my_ldexp02(-y,6);  // 1.0*2^6

   printf("2^6=%.2f\n",x);

  

 

   system("pause");

   return 0;

}

阅读(2955) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~