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

淡泊明志 宁静致远

文章分类

全部博文(143)

文章存档

2011年(2)

2009年(1)

2007年(22)

2006年(118)

我的朋友

分类: C/C++

2006-12-05 17:54:55

C语言库函数源代码】

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

double my_floor(double x)

{

   register double ret;

   unsigned short int temp1, temp2;

 

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

   temp2 = (temp1 & 0xf3ff) | 0x0400; /* rounding down */

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

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

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

 

   return ret;

}//向下取整

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

double my_floor01(double x)

{

   double y=x;

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

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

    else

        return (float)((int)x);

}

int main()

{

   double a = 88.8;

   printf("floor(%f) = %f\n",a,my_floor(a));

   a = -88.8;

   printf("floor(%f) = %f\n",a,my_floor(a));

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

   a = 88.8;

   printf("floor(%f) = %f\n",a,my_floor01(a));

   a = -88.8;

   printf("floor(%f) = %f\n",a,my_floor01(a));

 

   system("pause");

   return 0;

}

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