转自:http://www.runoob.com/cprogramming/c-standard-library-math-h.html
math.h 数学函数库,一些数学计算的公式的具体实现是放在math.h里,具体有:
1 三角函数
double sin (double);
double cos (double);
double tan (double);
2 反三角函数
double asin (double); 结果介于[-PI/2, PI/2]
double acos (double); 结果介于[0, PI]
double atan (double); 反正切(主值), 结果介于[-PI/2, PI/2]
double atan2 (double, double); 反正切(整圆值), 结果介于[-PI/2, PI/2]
3 双曲三角函数
double sinh (double);
double cosh (double);
double tanh (double);
4 指数与对数
double exp (double);
double pow (double, double);
double sqrt (double);
double log (double); 以e为底的对数
double log10 (double);c++中自然对数函数:log(N) 以10为底:log10(N)但没有以2为底的函数但是可以用换底公式解 决:log2(N)=log10(N)/log10(2)
5 取整
double ceil (double); 取上整
double floor (double); 取下整
6 绝对值
double fabs (double);
7 标准化浮点数
double frexp (double f, int *p); 标准化浮点数, f = x * 2^p, 已知f求x, p ( x介于[0.5, 1] )
double ldexp (double x, int p); 与frexp相反, 已知x, p求f
8 取整与取余
double modf (double, double*); 将参数的整数部分通过指针回传, 返回小数部分
double fmod (double, double); 返回两参数相除的余数
source: 《C & C++ Code Capsules》
9 平方根
sqrt
简介
math.h 头文件定义了各种数学函数和一个宏。在这个库中所有可用的功能都带有一个 double 类型的参数,且都返回 double 类型的结果。
库宏
下面是这个库中定义的唯一的一个宏:
序号 | 宏 & 描述 |
---|---|
1 | HUGE_VAL 当函数的结果不可以表示为浮点数时。如果是因为结果的幅度太大以致于无法表示,则函数会设置 errno 为 ERANGE 来表示范围错误,并返回一个由宏 HUGE_VAL 或者它的否定(- HUGE_VAL)命名的一个特定的很大的值。 如果结果的幅度太小,则会返回零值。在这种情况下,error 可能会被设置为 ERANGE,也有可能不会被设置为 ERANGE。 |
库函数
下面列出了头文件 math.h 中定义的函数:
序号 | 函数 & 描述 |
---|---|
1 | double acos(double x) 返回以弧度表示的 x 的反余弦。 |
2 | double asin(double x) 返回以弧度表示的 x 的反正弦。 |
3 | double atan(double x) 返回以弧度表示的 x 的反正切。 |
4 | double atan2(double y, double x) 返回以弧度表示的 y/x 的反正切。y 和 x 的值的符号决定了正确的象限。 |
5 | double cos(double x) 返回弧度角 x 的余弦。 |
6 | double cosh(double x) 返回 x 的双曲余弦。 |
7 | double sin(double x) 返回弧度角 x 的正弦。 |
8 | double sinh(double x) 返回 x 的双曲正弦。 |
9 | double tanh(double x) 返回 x 的双曲正切。 |
10 | double exp(double x) 返回 e 的 x 次幂的值。 |
11 | double frexp(double x, int exponent) 把浮点数 x 分解成尾数和指数。返回值是尾数,并将指数存入 exponent 中。所得的值是 x = mantissa 2 ^ exponent。 |
12 | double ldexp(double x, int exponent) 返回 x 乘以 2 的 exponent 次幂。 |
13 | double log(double x) 返回 x 的自然对数(基数为 e 的对数)。 |
14 | double log10(double x) 返回 x 的常用对数(基数为 10 的对数)。 |
15 | double modf(double x, double *integer) 返回值为小数部分(小数点后的部分),并设置 integer 为整数部分。 |
16 | double pow(double x, double y) 返回 x 的 y 次幂。 |
17 | double sqrt(double x) 返回 x 的平方根。 |
18 | double ceil(double x) 返回大于或等于 x 的最小的整数值。 |
19 | double fabs(double x) 返回 x 的绝对值。 |
20 | double floor(double x) 返回小于或等于 x 的最大的整数值。 |
21 | double fmod(double x, double y) 返回 x 除以 y 的余数。 |
1.C 库函数 - acos()
描述
C 库函数 double acos(double x) 返回以弧度表示的 x 的反余弦。
声明
下面是 acos() 函数的声明。
double acos(double x)
- 1
参数
- x – 介于 [-1,+1] 区间的浮点值。
返回值
该函数返回以弧度表示的 x 的反余弦,弧度区间为 [0, pi]。
实例
下面的实例演示了 acos() 函数的用法。
#include <stdio.h>
#include <math.h>
#define PI 3.14159265
int main ()
{
double x, ret, val;
x = 0.9;
val = 180.0 / PI;
ret = acos(x) * val;
printf("%lf 的反余弦是 %lf 度", x, ret);
return(0);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
让我们编译并运行上面的程序,这将产生以下结果:
0.900000 的反余弦是 25.855040 度
- 1
2.C 库函数 - asin()
描述
C 库函数 double asin(double x) 返回以弧度表示的 x 的反正弦。
声明
下面是 asin() 函数的声明。
double asin(double x)
- 1
参数
- x – 介于 [-1,+1] 区间的浮点值。
返回值
该函数返回以弧度表示的 x 的反正弦,弧度区间为 [-pi/2,+pi/2]。
实例
下面的实例演示了 asin() 函数的用法。
#include <stdio.h>
#include <math.h>
#define PI 3.14159265
int main ()
{
double x, ret, val;
x = 0.9;
val = 180.0 / PI;
ret = asin(x) * val;
printf("%lf 的反正弦是 %lf 度", x, ret);
return(0);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
让我们编译并运行上面的程序,这将产生以下结果:
0.900000 的反正弦是 64.190609 度
- 1
3.C 库函数 - atan()
描述
C 库函数 double atan(double x) 返回以弧度表示的 x 的反正切。
声明
下面是 atan() 函数的声明。
double atan(double x)
- 1
参数
- x – 浮点值。
返回值
该函数返回以弧度表示的 x 的反正切,弧度区间为 [-pi/2,+pi/2]。
实例
下面的实例演示了 atan() 函数的用法。
#include <stdio.h>
#include <math.h>
#define PI 3.14159265
int main ()
{
double x, ret, val;
x = 1.0;
val = 180.0 / PI;
ret = atan (x) * val;
printf("%lf 的反正切是 %lf 度", x, ret);
return(0);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
让我们编译并运行上面的程序,这将产生以下结果:
1.000000 的反正切是 45.000000 度
- 1
4.C 库函数 - atan2()
描述
C 库函数 double atan2(double y, double x) 返回以弧度表示的 y/x 的反正切。y 和 x 的值的符号决定了正确的象限。
声明
下面是 atan2() 函数的声明。
double atan2(double y, double x)
- 1
参数
- x – 代表 x 轴坐标的浮点值。
- y – 代表 y 轴坐标的浮点值。
返回值
该函数返回以弧度表示的 y/x 的反正切,弧度区间为 [-pi,+pi]。
实例
下面的实例演示了 atan2() 函数的用法。
#include <stdio.h>
#include <math.h>
#define PI 3.14159265
int main ()
{
double x, y, ret, val;
x = -7.0;
y = 7.0;
val = 180.0 / PI;
ret = atan2 (y,x) * val;
printf("x = %lf, y = %lf 的反正切", x, y);
printf("是 %lf 度\n", ret);
return(0);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
让我们编译并运行上面的程序,这将产生以下结果:
x = -7.000000, y = 7.000000 的反正切是 135.000000 度
- 1
5.C 库函数 - cos()
描述
C 库函数 double cos(double x) 返回弧度角 x 的余弦。
声明
下面是 cos() 函数的声明。
double cos(double x)
- 1
参数
- x – 浮点值,代表了一个以弧度表示的角度。
返回值
该函数返回 x 的余弦。
实例
下面的实例演示了 cos() 函数的用法。
#include <stdio.h>
#include <math.h>
#define PI 3.14159265
int main ()
{
double x, ret, val;
x = 60.0;
val = PI / 180.0;
ret = cos( x*val );
printf("%lf 的余弦是 %lf 度\n", x, ret);
x = 90.0;
val = PI / 180.0;
ret = cos( x*val );
printf("%lf 的余弦是 %lf 度\n", x, ret);
return(0);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
让我们编译并运行上面的程序,这将产生以下结果:
60.000000 的余弦是 0.500000 度
90.000000 的余弦是 0.000000 度
- 1
- 2
6.C 库函数 - cosh()
描述
C 库函数 double cosh(double x) 返回 x 的双曲余弦。
声明
下面是 cosh() 函数的声明。
double cosh(double x)
- 1
参数
- x – 浮点值。
返回值
该函数返回 x 的双曲余弦。
实例
下面的实例演示了 cosh() 函数的用法。
#include <stdio.h>
#include <math.h>
int main ()
{
double x;
x = 0.5;
printf("%lf 的双曲余弦是 %lf\n", x, cosh(x));
x = 1.0;
printf("%lf 的双曲余弦是 %lf\n", x, cosh(x));
x = 1.5;
printf("%lf 的双曲余弦是 %lf\n", x, cosh(x));
return(0);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
让我们编译并运行上面的程序,这将产生以下结果:
0.500000 的双曲余弦是 1.127626
1.000000 的双曲余弦是 1.543081
1.500000 的双曲余弦是 2.352410
- 1
- 2
- 3
7.C 库函数 - sin()
描述
C 库函数 double sin(double x) 返回弧度角 x 的正弦。
声明
下面是 sin() 函数的声明。
double sin(double x)
- 1
参数
- x – 浮点值,代表了一个以弧度表示的角度。
返回值
该函数返回 x 的正弦。
实例
下面的实例演示了 sin() 函数的用法。
#include <stdio.h>
#include <math.h>
#define PI 3.14159265
int main ()
{
double x, ret, val;
x = 45.0;
val = PI / 180;
ret = sin(x*val);
printf("%lf 的正弦是 %lf 度", x, ret);
return(0);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
让我们编译并运行上面的程序,这将产生以下结果:
45.000000 的正弦是 0.707107 度
- 1
8.C 库函数 - sinh()
描述
C 库函数 double sinh(double x) 返回 x 的双曲正弦。
声明
下面是 sinh() 函数的声明。
double sinh(double x)
- 1
参数
- x – 浮点值。
返回值
该函数返回 x 的双曲正弦。
实例
下面的实例演示了 sinh() 函数的用法。
#include <stdio.h>
#include <math.h>
int main ()
{
double x, ret;
x = 0.5;
ret = sinh(x);
printf("%lf 的双曲正弦是 %lf 度", x, ret);
return(0);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
让我们编译并运行上面的程序,这将产生以下结果:
0.500000 的双曲正弦是 0.521095 度
- 1
9.C 库函数 - tanh()
描述
C 库函数 double tanh(double x) 返回 x 的双曲正切。
声明
下面是 tanh() 函数的声明。
double tanh(double x)
- 1
参数
- x – 浮点值。
返回值
该函数返回 x 的双曲正切。
实例
下面的实例演示了 tanh() 函数的用法。
#include <stdio.h>
#include <math.h>
int main ()
{
double x, ret;
x = 0.5;
ret = tanh(x);
printf("%lf 的双曲正切是 %lf 度", x, ret);
return(0);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
让我们编译并运行上面的程序,这将产生以下结果:
0.500000 的双曲正切是 0.462117 度
- 1
10.C 库函数 - exp()
描述
C 库函数 double exp(double x) 返回 e 的 x 次幂的值。
声明
下面是 exp() 函数的声明。
double exp(double x)
- 1
参数
- x – 浮点值。
返回值
该函数返回 e 的 x 次幂。
实例
下面的实例演示了 exp() 函数的用法。
#include <stdio.h>
#include <math.h>
int main ()
{
double x = 0;
printf("e 的 %lf 次幂是 %lf\n", x, exp(x));
printf("e 的 %lf 次幂是 %lf\n", x+1, exp(x+1));
printf("e 的 %lf 次幂是 %lf\n", x+2, exp(x+2));
return(0);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
让我们编译并运行上面的程序,这将产生以下结果:
e 的 0.000000 次幂是 1.000000
e 的 1.000000 次幂是 2.718282
e 的 2.000000 次幂是 7.389056
- 1
- 2
- 3
11.C 库函数 - frexp()
描述
C 库函数 double frexp(double x, int exponent) 把浮点数 x 分解成尾数和指数。返回值是尾数,并将指数存入 exponent 中。所得的值是 x = mantissa 2 ^ exponent。
声明
下面是 frexp() 函数的声明。
double frexp(double x, int *exponent)
- 1
参数
- x – 要被计算的浮点值。
- exponent – 指向一个对象的指针,该对象存储了指数的值。
返回值
该函数返回规格化小数。如果参数 x 不为零,则规格化小数是 x 的二次方,且它的绝对值范围从 1/2(包含)到 1(不包含)。如果 x 为零,则规格化小数是零,且零存储在 exp 中。
实例
下面的实例演示了 frexp() 函数的用法。
#include <stdio.h>
#include <math.h>
int main ()
{
double x = 1024, fraction;
int e;
fraction = frexp(x, &e);
printf("x = %.2lf = %.2lf * 2^%d\n", x, fraction, e);
return(0);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
让我们编译并运行上面的程序,这将产生以下结果:
x = 1024.00 = 0.50 * 2^11
- 1
12.C 库函数 - ldexp()
描述
C 库函数 double ldexp(double x, int exponent) 返回 x 乘以 2 的 exponent 次幂。
声明
下面是 ldexp() 函数的声明。
double ldexp(double x, int exponent)
- 1
参数
- x – 代表有效位数的浮点值。
- exponent – 指数的值。
返回值
该函数返回 x * 2 exp。
实例
下面的实例演示了 ldexp() 函数的用法。
#include <stdio.h>
#include <math.h>
int main ()
{
double x, ret;
int n;
x = 0.65;
n = 3;
ret = ldexp(x ,n);
printf("%f * 2^%d = %f\n", x, n, ret);
return(0);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
让我们编译并运行上面的程序,这将产生以下结果:
0.650000 * 2^3 = 5.200000
- 1
13.C 库函数 - log()
描述
C 库函数 double log(double x) 返回 x 的自然对数(基数为 e 的对数)。
声明
下面是 log() 函数的声明。
double log(double x)
- 1
参数
- x – 浮点值。
返回值
该函数返回 x 的自然对数。
实例
下面的实例演示了 log() 函数的用法。
#include <stdio.h>
#include <math.h>
int main ()
{
double x, ret;
x = 2.7;
/* 计算 log(2.7) */
ret = log(x);
printf("log(%lf) = %lf", x, ret);
return(0);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
让我们编译并运行上面的程序,这将产生以下结果:
log(2.700000) = 0.993252
- 1
14.C 库函数 - log10()
描述
C 库函数 double log10(double x) 返回 x 的常用对数(基数为 10 的对数)。
声明
下面是 log10() 函数的声明。
double log10(double x)
- 1
参数
- x – 浮点值。
返回值
该函数返回 x 的常用对数,x 的值大于 0。
实例
下面的实例演示了 log10() 函数的用法。
#include <stdio.h>
#include <math.h>
int main ()
{
double x, ret;
x = 10000;
/* 计算 log10(10000) */
ret = log10(x);
printf("log10(%lf) = %lf\n", x, ret);
return(0);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
让我们编译并运行上面的程序,这将产生以下结果:
log10(10000.000000) = 4.000000
- 1
15.C 库函数 - modf()
描述
C 库函数 double modf(double x, double *integer) 返回值为小数部分(小数点后的部分),并设置 integer 为整数部分。
声明
下面是 modf() 函数的声明。
double modf(double x, double *integer)
- 1
参数
- x – 浮点值。
- integer – 指向一个对象的指针,该对象存储了整数部分。
返回值
该函数返回 x 的小数部分,符号与 x 相同。
实例
下面的实例演示了 modf() 函数的用法。
#include<stdio.h>
#include<math.h>
int main ()
{
double x, fractpart, intpart;
x = 8.123456;
fractpart = modf(x, &intpart);
printf("整数部分 = %lf\n", intpart);
printf("小数部分 = %lf \n", fractpart);
return(0);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
让我们编译并运行上面的程序,这将产生以下结果:
整数部分 = 8.000000
小数部分 = 0.123456
- 1
- 2
16.C 库函数 - pow()
描述
C 库函数 double pow(double x, double y) 返回 x 的 y 次幂,即 xy。
声明
下面是 pow() 函数的声明。
double pow(double x, double y)
- 1
参数
- x – 代表基数的浮点值。
- y – 代表指数的浮点值。
返回值
该函数返回 x 的 y 次幂的结果。
实例
下面的实例演示了 pow() 函数的用法。
#include <stdio.h>
#include <math.h>
int main ()
{
printf("值 8.0 ^ 3 = %lf\n", pow(8.0, 3));
printf("值 3.05 ^ 1.98 = %lf", pow(3.05, 1.98));
return(0);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
让我们编译并运行上面的程序,这将产生以下结果:
值 8.0 ^ 3 = 512.000000
值 3.05 ^ 1.98 = 9.097324
- 1
- 2
17.C 库函数 - sqrt()
描述
C 库函数 double sqrt(double x) 返回 x 的平方根。
声明
下面是 sqrt() 函数的声明。
double sqrt(double x)
- 1
参数
- x – 浮点值。
返回值
该函数返回 x 的平方根。
实例
下面的实例演示了 sqrt() 函数的用法。
#include <stdio.h>
#include <math.h>
int main ()
{
printf("%lf 的平方根是 %lf\n", 4.0, sqrt(4.0) );
printf("%lf 的平方根是 %lf\n", 5.0, sqrt(5.0) );
return(0);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
让我们编译并运行上面的程序,这将产生以下结果:
4.000000 的平方根是 2.000000
5.000000 的平方根是 2.236068
- 1
- 2
18.C 库函数 - ceil()
描述
C 库函数 double ceil(double x) 返回大于或等于 x 的最小的整数值。
声明
下面是 ceil() 函数的声明。
double ceil(double x)
- 1
参数
- x – 浮点值。
返回值
该函数返回不小于 x 的最小整数值。
实例
下面的实例演示了 ceil() 函数的用法。
#include <stdio.h>
#include <math.h>
int main ()
{
float val1, val2, val3, val4;
val1 = 1.6;
val2 = 1.2;
val3 = 2.8;
val4 = 2.3;
printf ("value1 = %.1lf\n", ceil(val1));
printf ("value2 = %.1lf\n", ceil(val2));
printf ("value3 = %.1lf\n", ceil(val3));
printf ("value4 = %.1lf\n", ceil(val4));
return(0);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
让我们编译并运行上面的程序,这将产生以下结果:
value1 = 2.0
value2 = 2.0
value3 = 3.0
value4 = 3.0
- 1
- 2
- 3
- 4
19.C 库函数 - fabs()
描述
C 库函数 double fabs(double x) 返回 x 的绝对值。
声明
下面是 fabs() 函数的声明。
double fabs(double x)
- 1
参数
- x – 浮点值。
返回值
该函数返回 x 的绝对值。
实例
下面的实例演示了 fabs() 函数的用法。
#include <stdio.h>
#include <math.h>
int main ()
{
int a, b;
a = 1234;
b = -344;
printf("%d 的绝对值是 %lf\n", a, fabs(a));
printf("%d 的绝对值是 %lf\n", b, fabs(b));
return(0);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
让我们编译并运行上面的程序,这将产生以下结果:
1234 的绝对值是 1234.000000
-344 的绝对值是 344.000000
- 1
- 2
20.C 库函数 - floor()
描述
C 库函数 double floor(double x) 返回小于或等于 x 的最大的整数值。
声明
下面是 floor() 函数的声明。
double floor(double x)
- 1
参数
- x– 浮点值。
返回值
该函数返回不大于 x 的最大整数值。
实例
下面的实例演示了 floor() 函数的用法。
#include <stdio.h>
#include <math.h>
int main ()
{
float val1, val2, val3, val4;
val1 = 1.6;
val2 = 1.2;
val3 = 2.8;
val4 = 2.3;
printf("Value1 = %.1lf\n", floor(val1));
printf("Value2 = %.1lf\n", floor(val2));
printf("Value3 = %.1lf\n", floor(val3));
printf("Value4 = %.1lf\n", floor(val4));
return(0);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
让我们编译并运行上面的程序,这将产生以下结果:
Value1 = 1.0
Value2 = 1.0
Value3 = 2.0
Value4 = 2.0
- 1
- 2
- 3
- 4
21.C 库函数 - fmod()
描述
C 库函数 double fmod(double x, double y) 返回 x 除以 y 的余数。
声明
下面是 fmod() 函数的声明。
double fmod(double x, double y)
- 1
参数
- x – 代表分子的浮点值。
- y – 代表分母的浮点值。
返回值
该函数返回 x/y 的余数。
实例
下面的实例演示了 fmod() 函数的用法。
#include <stdio.h>
#include <math.h>
int main ()
{
float a, b;
int c;
a = 9.2;
b = 3.7;
c = 2;
printf("%f / %d 的余数是 %lf\n", a, c, fmod(a,c));
printf("%f / %f 的余数是 %lf\n", a, b, fmod(a,b));
return(0);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
让我们编译并运行上面的程序,这将产生以下结果:
9.200000 / 2 的余数是 1.200000
9.200000 / 3.700000 的余数是 1.800000