淡泊明志 宁静致远
分类: 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;
}