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

淡泊明志 宁静致远

文章分类

全部博文(143)

文章存档

2011年(2)

2009年(1)

2007年(22)

2006年(118)

我的朋友

分类: C/C++

2006-12-05 17:53:34

C语言库函数源代码】

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

double my_ceil(double x)

{

   register double ret;

   unsigned short int temp1, temp2;

  

   __asm__("fnstcw %0" : "=m" (temp1));

   temp2 = (temp1 & 0xf3ff) | 0x0800; /* rounding up */

   __asm__("fldcw %0" : : "m" (temp2));

   __asm__("frndint" : "=t" (ret) : "0" (x));

   __asm__("fldcw %0" : : "m" (temp1));

  

   return ret;

}//向上取整

//下面是俺自己写的向上取整函数

double my_ceil01(double x)

{

   double y=x;

    if( (*( ( (int *) &y)+1) & 0x80000000) != 0)//或者if(x<0)

        return (float)((int)x);

    else                 //讨论非负的情况。

   {

        if(x == 0)

        return (float)((int)x);

        else

        return (float)((int)x) + 1;

   }

}

 

int main()

{

   double a = 88.8;

   printf("ceil(%f) = %f\n",a,my_ceil(a));

   a = -88.8;

   printf("ceil(%f) = %f\n",a,my_ceil(a));

   printf("****************************\n");

   a = 88.8;

   printf("ceil(%f) = %f\n",a,my_ceil01(a));

   a = -88.8;

   printf("ceil(%f) = %f\n",a,my_ceil01(a));

 

   system("pause");

   return 0;

}

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