【C语言库函数源代码】

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

/*

hypot函数对于给定的直角三角形的两个直角边,

求其斜边的长度。

*/

//一般的常规算法:

doublemy_hypot01(double x, double y)

{

double hypotenuse;

x = fabs(x);

y = fabs(y);

if (x < y)

{

double temp = x;

x = y;

y = temp;

}

if (x == 0.)

return 0.;

else

{

hypotenuse = y/x;

return x*sqrt(1.+hypotenuse*hypotenuse);

}

}

#define__SQRT_DBL_MAX 1.3e+154

#define__SQRT_DBL_MIN 2.3e-162

doublemy_hypot02(double x, double y)

{

double ratio;

double r, t, s, p, q;

x = fabs(x), y = fabs(y);

if (x < y)

{

double temp = x;

x = y;

y = temp;

}//保持x 是两个直角边中较长的边,y是较短的边。

if (y == 0.)

return x;

/*

主要考虑的是当x很大而y很小,那么它们的平方和将会造成

丢失小数的现象。首先要判断y是否是太小,x是不是太大。

如果出现这种情况则用,第一个公式来处理。其他的则用

这样可以让求出的斜边更加精确一些。

*/

if ((ratio = y / x) > __SQRT_DBL_MIN && x < __SQRT_DBL_MAX)

return x * sqrt(1. + ratio*ratio);

else

{//使用3次迭代是增加精确度。

r = ratio*ratio, p = x, q = y;

do

{

t = 4.+ r;

if (t == 4.)

break;

s = r / t;

p += 2. * s * p;

q *= s;

r = (q / p) * (q / p);

} while (1);

return p;

}

}

structcomplex

{

double x;

double y;

}

doublecabs(struct complex x)

{

return hypot(z.x,z.y);

}//hypot 函数的封装(这里不再举调用的例子了。)

# defineDBL_MAX1.79769313486231e+308

# defineDBL_MIN2.22507385850721e-308

intmain(void)

{

printf("hypot(3, 4)=%25.17e/n",hypot(3., 4.));

printf("hypot(3*10^150,4*10^150)=%25.17g/n",hypot(3.e+150, 4.e+150));

printf("hypot(3*10^306,4*10^306)=%25.17g/n",hypot(3.e+306, 4.e+306));

printf("hypot(3*10^-320,4*10^-320)=%25.17g/n",hypot(3.e-320, 4.e-320));

printf("hypot(0.7*DBL_MAX,0.7*DBL_MAX) =%25.17g/n",hypot(0.7*DBL_MAX,0.7*DBL_MAX));

printf("hypot(DBL_MAX, 1.0)=%25.17g/n",hypot(DBL_MAX, 1.0));

printf("hypot(1.0, DBL_MAX)=%25.17g/n",hypot(1.0, DBL_MAX));

printf("hypot(0.0, DBL_MAX)=%25.17g/n",hypot(0.0, DBL_MAX));

printf("/n************************************************************/n");

printf("hypot(3, 4)=%25.17e/n",my_hypot01(3., 4.));

printf("hypot(3*10^150,4*10^150)=%25.17g/n",my_hypot01(3.e+150, 4.e+150));

printf("hypot(3*10^306,4*10^306)=%25.17g/n",my_hypot01(3.e+306, 4.e+306));

printf("hypot(3*10^-320,4*10^-320)=%25.17g/n",my_hypot01(3.e-320, 4.e-320));

printf("hypot(0.7*DBL_MAX,0.7*DBL_MAX) =%25.17g/n",my_hypot01(0.7*DBL_MAX,0.7*DBL_MAX));

printf("hypot(DBL_MAX, 1.0)=%25.17g/n",my_hypot01(DBL_MAX, 1.0));

printf("hypot(1.0, DBL_MAX)=%25.17g/n",my_hypot01(1.0, DBL_MAX));

printf("hypot(0.0, DBL_MAX)=%25.17g/n",my_hypot01(0.0, DBL_MAX));

printf("/n************************************************************/n");

printf("hypot(3, 4)=%25.17e/n",my_hypot02(3., 4.));

printf("hypot(3*10^150,4*10^150) =%25.17g/n",my_hypot02(3.e+150, 4.e+150));

printf("hypot(3*10^306,4*10^306)=%25.17g/n",my_hypot02(3.e+306, 4.e+306));

printf("hypot(3*10^-320,4*10^-320)=%25.17g/n",my_hypot02(3.e-320, 4.e-320));

printf("hypot(0.7*DBL_MAX,0.7*DBL_MAX) =%25.17g/n",my_hypot02(0.7*DBL_MAX,0.7*DBL_MAX));

printf("hypot(DBL_MAX, 1.0)=%25.17g/n",my_hypot02(DBL_MAX, 1.0));

printf("hypot(1.0, DBL_MAX)=%25.17g/n",my_hypot02(1.0, DBL_MAX));

printf("hypot(0.0, DBL_MAX)=%25.17g/n",my_hypot02(0.0, DBL_MAX));

system("pause");

return 0;

}

c语言hypot函数,hypot ( )【C语言库函数源代码】相关推荐

  1. c语言hypot函数,hypot()函数以及C ++中的示例

    C ++hypot()函数 hypot()函数是cmath标头的库函数,用于查找给定数字的斜边,接受两个数字并返回斜边的计算结果,即sqrt(x * x + y * y). hypot()函数语法:h ...

  2. c语言pow函数用法_C语言基础的不能再基础的程序知识!“hello world”!

    涉及到的知识点有:include有两种用法.{}大括号用法解释.C语言自定义名字的要求. c语言库函数printf的解释.编译错误有两种.调用system函数.c语言编译过程. 操作系统结构.指令集中 ...

  3. 51单片机c语言编程函数,单片机C语言教程:C51函数

    其实一直出现在例子中的 main()也算是一个函数,只不过它比较特殊,编译时以它做为程序的开始段.有了函数C 语言就有了模块化的优点,一般功能较多的程序,会在编写程序时把每项单独的功能分成数个子程序模 ...

  4. c语言 is函数,关于C语言回调函数的详解~

    原标题:关于C语言回调函数的详解~ 01 什么是回调函数? 回调函数,光听名字就比普通函数要高大上一些,那到底什么是回调函数呢?恕我读得书少,没有在那本书上看到关于回调函数的定义.我在百度上搜了一下, ...

  5. c语言scanf函数作用,C语言scanf函数应用问题解答

    C语言scanf函数应用问题解答 C语言的输入是由系统提供的库函数完成的.scanf函数是C语言中最常用且功能最强的输入函数,但该函数如使用不慎,就会出现错误或得不到预想的结果.以下结果都是基于VC+ ...

  6. C语言 回调函数 callback - C语言零基础入门教程

    目录 一.回调函数原理 二.回调函数简介 1.函数指针 2.指针函数 3.回调函数解释 三.回调函数实战 四.回调函数使用总结 五.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 ...

  7. linux中c语言kbhit函数用法,C语言判断用户是否输入-非阻塞函数kbhit

    一.基础研究 要从地址读取数据,肯定是要定义一个指针变量p,用它来实现变换地址和取值的功能.另外程序是当两个条件中的某一个出现时才停止,所以应该用while~do循环语句循环输出n和d,并用while ...

  8. c语言memset函数用法,C语言memset函数使用方法详解

    C语言memset函数使用方法详解 一.函数原形   void *  memset(void*s, int ch,size_t n) 二.函数作用  将以s内存地址为首的连续n个字节的内容置成ch,一 ...

  9. c语言atoi函数定义,C语言函数 atoi()

    C语言函数 atoi() C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言.下面我们来看看C语言函数 atoi() C语言函数 ...

最新文章

  1. c语言的舞蹈机器人开题报告范文,现代舞编创手法在拉丁表演舞中的应用研究—本科开题报告...
  2. jta mysql_JTA 使用 MySQL 分布式事务
  3. C++Primer学习之一引用和指针
  4. php 设置返回的类型是图片,PHP检查上传的图片并返回图片的真正类型【扩展名】...
  5. 培养用户习惯才是软件的唯一出路!
  6. 思科BFD协议帮助侦测网络失败
  7. 什么是低信噪比图像及处理方法
  8. Junit4中的新断言assertThat的使用方法
  9. hashmap value占用空间大小_如何获取 java hashmap占用存储空间空间大小
  10. 线程并发与进程并发各有什么you_【白话计算机基础】并发与并行,进程、线程与协程, 同步与异步,阻塞与非阻塞...
  11. BIND rndc—使用说明
  12. tg3269c网卡驱动linux,TP-Link TG-3269C驱动
  13. 使用spss进行系统聚类分析
  14. 破解并配置WebStorm
  15. Google帝国研究——Google的产业构成
  16. 手机投屏到电脑完美教程,安卓和苹果用户均可使用
  17. ERP系统与精益生产
  18. 今天发布《看图玩儿》看图软件
  19. UGUI Canvas(画布)详解
  20. 【ybt金牌导航2-3-3】【luogu P3975】K小子串 / 弦论

热门文章

  1. android recovery 和reboot
  2. 微信小程序介绍、区别
  3. (附源码)计算机毕业设计ssm高校请假管理系统
  4. 【网络知识】3. 千兆网传输速度125MB/s、百兆网12.5MB/s,码率、比特率、带宽、文件大小M就是MB
  5. 2个阶乘什么意思_两个阶乘符号连在一起是什么意思
  6. 十个前端程序员必备的网站
  7. word的页脚页码从9开始后面全是1,怎么解决?
  8. 华为vrrp默认优先级_网关冗余VRRP
  9. 成都盛迈坤电商:店铺有效评价要怎么进行提升
  10. 腾讯云轻量8核16G服务器18M带宽CPU流量性能测评