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

淡泊明志 宁静致远

文章分类

全部博文(143)

文章存档

2011年(2)

2009年(1)

2007年(22)

2006年(118)

我的朋友

分类: C/C++

2006-12-05 12:51:15

C语言库函数源代码】

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

float my_fabs01 (float fnumber)

{

  float ret;

  __asm__ (

     "fabs\n\r"

     : "=t" (ret)

     : "0" (fnumber)

  );

  return ret;

}

//直接调用了奔腾系列CPU浮点指令系统中的求浮点数绝对值指令。

 

float my_fabs02(float fnumber)

{

   *( (int *) &fnumber) &=0x7FFFFFFF;

  return fnumber;

}

//取得浮点数的地址,然后把符号位置0。

 

double my_fabs03(double dnumber)

{

  *( ( (int *) & dnumber) + 1) &=0x7FFFFFFF;

  return dnumber;

}

int main()

{

  

   printf("%f\n",my_fabs01(0.000001));

   printf("%f\n",my_fabs01(-0.000001));

   printf("%f\n",my_fabs01(1.1234567));

   printf("%f\n",my_fabs01(-1.1234567));

  

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

  

   printf("%f\n",my_fabs02(0.000001));

   printf("%f\n",my_fabs02(-0.000001));

   printf("%f\n",my_fabs02(1.1234567));

   printf("%f\n",my_fabs02(-1.1234567));

  

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

  

   printf("%f\n",my_fabs03(111111111.0000019));

   printf("%f\n",my_fabs03(-111111111.0000019));

   printf("%f\n",my_fabs03(1234567.12345678));

   printf("%f\n",my_fabs03(-1234567.12345678));

 

   system("pause");

   return 0;

}

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