第284页 | C Primer Plus 中文版 | 阅读 ‧ 电子书库

同步阅读进度,多语言翻译,过滤屏幕蓝光,评论分享,更多完整功能,更好读书体验,试试 阅读 ‧ 电子书库

16.9 数学库

数学库包含许多有用的数学函数。头文件math.h提供这些函数的函数声明或原型。表16.4列举了一些math.h中声明的函数。注意角度的单位为弧度(1弧度=180/π=57.296度)(参考资料5“添加了C99的标准ANSI C库”提供了C99标准指定的函数的完整列表)。

表16.4 ANSI C标准数学函数原型描述

 

 

原型 描述 double acos (double x) 返回余弦值为x的角度值(0到π弧度) double asin (double x) 返回正弦值为x的角度值(-π/2到π/2弧度) double atan (double x) 返回正切值为x的角度值(-π/2到π/2弧度) double atan2 (double y, double x) 返回正切值为y/x的角度值(-π到π弧度) double cos (double x) 返回x的余弦值,x单位为弧度 double sin (double x) 返回x的正弦值,x单位为弧度 double tan (double x) 返回x的正切值,x单位为弧度 double exp (double x) 返回x的指数函数的值(e的x次方) double log (double x) 返回x的自然对数值 double log10 (double x) 返回x的以10为底的对数值 double pow (double x, double y) 返回x的y次幂的值 double sqrt (double x) 返回x的平方根 double ceil (double x) 返回不小于x的最小整数值 double fabs (double x) 返回x的绝对值 double floor (double x) 返回不大于x的最大整数值

我们用数学库来解决一个常见问题:把x/y坐标转换为长度和角度。例如,在栅格上画了一条线,该线条水平穿过4个单元(x的值),垂直穿过3个单元(y的值)。那么,该线的长度(或称大小,magnitude)和方向如何呢?从三角知识可得到下面两个式子:

数学库提供了平方根函数和一对反正切函数。因此,可以用C程序解决这个问题。平方根函数sqrt()接受一个double参数并返回该参数的平方根,返回值类型也是double。

函数atan()接受一个double参数(正切值),并返回角度值(该角度的正切值等于参数值)。但是,当线条的x和y值均为-5时,atan()函数会产生混淆。因为(-5)/(-5)等于1,所以atan()返回45。该值与x和y均为5时的返回值相同。换句话说,atan()不能区分角度相同但方向相反的线(实际上,atan()返回弧度,而非度;我们很快将讨论两者的转换)。

幸运的是,C库还提供atan2()函数。它接受两个参数:x的值和y的值。这样,通过检查x和y的符号就可得出正确的角度值。atan2()和atan()均返回弧度值。要将弧度转化为度,只需将弧度值乘以180,再除以pi。pi的值可通过计算表达式4*atan(1)得到。程序清单16.13说明了这些步骤。另外,学习该程序清单还能复习结构和typedef工具。

程序清单 16.13 rect_pol.c程序

下面是一个运行示例:

如果在编译时得到类似下面的消息:

或:

或其他类似消息,这表明编译器的链接器没有找到数学库。UNIX系统要求使用-lm标记以指示连接器搜索数学库:

Linux的gnu编译器也使用相同的形式:

请支持我们,让我们可以支付服务器费用。
使用微信支付打赏


上一页 · 目录下一页


下载 · 书页 · 阅读 ‧ 电子书库