当前位置: 首页 > 工具软件 > remark-math > 使用案例 >

C标准库学习之<math.h> ——数学函数

邓正谊
2023-12-01

数学头文件定义了很多数学函数。

宏:

HUGE_VAL

函数:

acos();
asin();
atan();
atan2();
ceil();
cos();
cosh();
exp();
fabs();
floor();
fmod();
frexp();
ldexp();
log();
log10();
modf();
pow();
sin();
sinh();
sqrt();
tan();
tanh();

错误条件

所有math.h函数产生错误的情形都是类似的。

当传递给函数的参数超出了函数要求的参数定义域时,变量errno被设置为EDOM。函数的返回值是依实现而定的。

当返回值太大而超出了double的数值范围时,函数返回宏值HUGE_VAL,并且设置变量errno为ERANGE来表示溢出。如果值太小以至于无法表示为double,则函数返回0。在这种情况下,errno是否被设置为ERANGE是依实现而定。

errno,EDOM,和ERANGE在头文件errno.h中定义。

注意在所有没有定义域限制的情形(即默认情况)下,参数的值被double类型的最大值和最小值所限制。

#include <stdio.h>
#include <math.h>

/*
=========================================================
time:           2017年1月24日11:29:21
objective:      test C language's  head file of <math.h> 
version:        Microsoft Visual C++
author:         ChenFei
remark:         日文system,,有些字没法打,要用拼音代替
=========================================================
*/

int main(void)
{
    double a = 10;
    double b = 3;

    double c;
    c = pow(a, b);  // a的b 次方   double pow(double x, double y);
    printf("%f\n",c);

    double d;
    d = fmod(a,b);  // a/b 的余数  double fmod(double x, double y);
    printf("%f\n",d);

    double e;
    e = sqrt(a);    // a 的平方根   double sqrt(double x, double y);
    printf("%f\n",e);

    double f;
    f = exp(a);     //  exp:自然dui数  e  yu等于 2.718282
    printf("%f\n",f);   // exp(a) -> e的 a次方                             double exp(double x, double y);

    double g, h;
    g = log(a);     //  e的 g次方 = a,求g (求 以e wei底 a 的 dui数)      double log(double x); 
    h = log10(a);   //  10的 h次方 = a,求h (求 以10 wei底 a 的 dui数)    double log10(double x);
    printf("%f\n",g);
    printf("%f\n",h);

    double i, j;
    i = ceil(a);        //  向上舍入:i >= a ,求整数i,返回double type。(jin一法) double ceil(double x);
    j = floor(11.1);    //  向下舍入:j <= a ,求整数j,返回double type。(去尾法)   double florr(double x);
    printf("%f\n",i);   //  %d 无效  == 0
    printf("%f\n",j);

    double k;
    k = fabs(a);        // k = |a|   double fabs(double x); 
    printf("%f\n",k);

    double l;
    l = ldexp(a, 1);    // l = a * 2 的 1次方  double ldexp(double x, int n);
    printf("%f\n",l);

    double m;
    int aa;
    m = frexp(a, &aa);  // a = m * 2^aa  求m     double frexp(double x, int* exp);
    printf("%f,%d\n",m,aa);

    double n;
    double ba;
    n = modf(-2.02, &ba);   // 分解-2.02,n wei小数部分,ba wei整数部分             double modf(double x, double* ip);
    printf("%f,%f\n",n,ba); 

    //正弦 余弦 正切  
    double sin(double x);
    double cos(double x);
    double tan(double x);

    //反正弦 反余弦 反正切1 反正切2
    double asin(double x);
    double acos(double x);
    double atan(double x);
    double atan2(double y, double x);

    //双曲正弦 双曲余弦 双曲正切
    double sinh(double x);
    double cosh(double x); 
    double tanh(double x);


    return 0;
}
 类似资料: