数学関数

数学関数一覧

mfunclist.c

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/*
  math.h
  
  三角関数:
  double sin(double x)
  double cos(double x)
  double tan(double x)

  逆三角関数:
  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)

  切り上げ:
  double ceil(double x)

  切り捨て:
  double floor(double x)

  ベキ乗と平方根, 指数と対数:
  double pow(double x, double y)
  double sqrt(double x)
  double exp(double x)
  double log(double x)
  double log10(double x)

  絶対値, 余り:
  double fabs(double x)
  double fmod(double x, double y)

  整数と少数の分割, 指数と仮数の分割, 指数仮数から小数点取得:
  double modf(double x, double *p)
  double frexp(double x, double *p)
  double ldexp (double x, double n)
*/

三角関数

sct.c

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/*
  math.h [sin]
  書式: double sin(double x)
  機能: サインの計算
  引数: double x: 角度(ラジアン)
  戻り値: サインの計算結果
*/

/*
  math.h [cos]
  書式: double cos(double x)
  機能: コサインの計算
  引数: double x: 角度(ラジアン)
  戻り値: コサインの計算結果
*/

/*
  math.h [tan]
  書式: double tan(double x)
  機能: タンジェントの計算
  引数: double x: 角度(ラジアン)
  戻り値: タンジェントの計算結果
*/

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

#define PI 3.141592

int main(void){
  double deg = 30;
  double rad = deg * PI / 180.0;
  double len = 2;

  double x = len * cos(rad);
  double y = len * sin(rad);

  printf("X = %f\n", x);
  printf("Y = %f\n", y);

  return 0;
}

sct.c の実行結果は:

[cactus:~/code_c/refer]% ./sct
X = 1.732051
Y = 1.000000

逆三角関数

asct.c

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/*
  math.h [asin]
  書式: double asin(double x)
  機能: アークサインの計算
  引数: double x: -1~1 のサイン値
  戻り値: アークサイン値 (ラジアン)
*/

/*
  math.h [acos]
  書式: double acos(double x)
  機能: アークサインの計算
  引数: double x: -1~1 のコサイン値
  戻り値: アークコサイン値 (ラジアン)
*/

/*
  math.h [atan]
  書式: double atan(double x)
  機能: アークタンジェントの計算
  引数: double x: -n/2 ~ n/2 のタンジェント値
  戻り値: アークタンジェントの値 (ラジアン)
*/

/*
  math.h [atan2]
  書式: double atan2(double y, double x)
  機能: y/x のアークタンジェントの計算
  引数: double y: y 座標
        double x: x 座標
  戻り値: アークタンジェントの値 (ラジアン)
*/

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

#define PI 3.141592

int main(void){
  double deg = 30;
  double rad = deg * PI / 180.0;

  printf("rad = %f\n", rad);

  double c = cos(rad);
  double a = acos(c);
  
  printf("acos = %f\n", a);

  return 0;
}

asct.c の実行結果は:

[cactus:~/code_c/refer]% ./asct
rad = 0.523599
acos = 0.523599

双曲線関数

scth.c

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/*
  math.h [sinh]
  書式: double sinh(double x)
  機能: ハイパボリックサインの計算
  引数: double x: 角度 (ラジアン)
  戻り値: ハイパボリックサインの計算結果
*/

/*
  math.h [cosh]
  書式: double cosh(double x)
  機能: ハイパボリックサインの計算
  引数: double x: 角度 (ラジアン)
  戻り値: ハイパボリックサインの計算結果
*/

/*
  math.h [tanh]
  書式: double tanh(double x)
  機能: ハイパボリックサインの計算
  引数: double x: 角度 (ラジアン)
  戻り値: ハイパボリックサインの計算結果
*/

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

#define PI 3.141592

int main(void){
  double deg = 30;
  double rad = deg * PI / 180.0;

  double num1 = sinh(rad);
  double num2 = cosh(rad);
  double num3 = tanh(rad);

  printf("num1 = %f\n", num1);
  printf("num2 = %f\n", num2);
  printf("num3 = %f\n", num3);

  return 0;
}

scth.c の実行結果は:

[cactus:~/code_c/refer]% ./scth
num1 = 0.547853
num2 = 1.140238
num3 = 0.480473

小数点の切り上げ

ceil.c

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*
  math.h [ceil]
  書式: double ceil(double x)
  機能: 小数点の切り上げ
  引数: double x: 切り上げする元の値
  戻り値: 小数点以下を切り上げした値
*/

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

int main(void){
  
  /* 四捨五入ではないことに注意する */
  double a = ceil(6.54321);
  double b = ceil(-6.54321);

  printf("a = %f\n", a);
  printf("b = %f\n", b);

  return 0;
}

ceil.c の実行結果は:

[cactus:~/code_c/refer]% ./ceil
a = 7.000000
b = -6.000000

小数点の切り捨て

floor.c

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
/*
  math.h [floor]
  書式: double floor(double x)
  機能: 小数点の切り捨て
  引数: double x: 切り捨てる元の値
  戻り値: 小数点以下を切り捨てした値
*/

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

int main(void){
  
  double a = floor(6.54321);
  double b = floor(-6.54321);

  printf("a = %f\n", a);
  printf("b = %f\n", b);

  return 0;
}

floor.c の実行結果は:

[cactus:~/code_c/refer]% ./floor
a = 6.000000
b = -7.000000

ベキ乗・平方根・指数対数

psell.c

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/*
  math.h [pow]
  書式: double pow(double x, double y)
  機能: ベキ乗の計算
  引数: double x: 基数
        double y: 指数
  戻り値: x の y 乗となる, ベキ乗の値
*/

/*
  math.h [sqrt]
  書式: double sqrt(double x)
  機能: 平方根の計算
  引数: double x: 元の値
  戻り値: x の 平方根の値
*/

/*
  math.h [exp]
  書式: double exp(double x)
  機能: 指数関数の計算
  引数: double x: 指数
  戻り値: 指数関数 e の x 乗の計算値
*/

/*
  math.h [log]
  書式: double log(double x)
  機能: 自然対数の計算
  引数: double x: 元の値
  戻り値: x の 自然対数の計算値
*/

/*
  math.h [log10]
  書式: double log10(double x)
  機能: 常用対数の計算
  引数: double x: 元の値
  戻り値: x の 常用対数の計算値
*/

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

int main(void){
  
  double a = pow(4.0, 2.0);
  double b = sqrt(a);
  printf("a = %f\n", a);
  printf("b = %f\n", b);

  double c = exp(1.0);
  double d = log(c);
  printf("c = %f\n", c);
  printf("d = %f\n", d);

  return 0;
}

psell.c の実行結果は:

[cactus:~/code_c/refer]% ./psell
a = 16.000000
b = 4.000000
c = 2.718282
d = 1.000000

浮動小数点の絶対値・余り

fam.c

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/*
  math.h [fabs]
  書式: double fabs(double x)
  機能: 浮動小数点の絶対値値の計算
  引数: double x: 元の浮動小数点値
  戻り値: 浮動小数点の絶対値
*/

/*
  math.h [fmod]
  書式: double fmod(double x, double y)
  機能: 浮動小数点の割り算を計算
  引数: double x: 分子
        double y: 分母
  戻り値: x / y の余りの値
*/

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

int main(void){
  
  double a = fabs(-5.4321);
  printf("a = %f\n", a);

  double b = fmod(5.4, 3.2);
  printf("b = %f\n", b);

  return 0;
}

fam.c の実行結果は:

[cactus:~/code_c/refer]% ./fam
a = 5.432100
b = 2.200000

その他の数学関数

mfl.c

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/*
  math.h [modf]
  書式: double fabs(double x, double *p)
  機能: 浮動小数点を, 整数部と少数部に分割する
  引数: double x: 元となる浮動小数点値
        double *p: 分割された整数部を格納
  戻り値: 分割された少数部を返す.
*/

/*
  math.h [frexp]
  書式: double frexp(double x, double *p)
  機能: 浮動小数点を, 指数部と仮数部に分割する
  引数: double x: 元となる浮動小数点値
        double *p: 分割された指数部を格納
  戻り値: 分割された仮数部を返す.
*/

/*
  math.h [ldexp]
  書式: double ldexp(double x, double n)
  機能: 仮数と指数から, 浮動小数点値を求める
  引数: double x: 仮数
        double n: 指数
  戻り値: x 仮数と n 指数からの浮動小数点値
*/

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

int main(void){
  
  double x = 6.54321;
  double a, b;

  b = modf(x, &a);
  
  printf("浮動小数点 x = %f\n", x);
  printf("整数部 = %f\n", a);
  printf("小数部 = %f\n", b);

  return 0;
}

mfl.c の実行結果は:

[cactus:~/code_c/refer]% ./mfl
浮動小数点 x = 6.543210
整数部 = 6.000000
小数部 = 0.543210

ラジアンと角度の相互変換

pidera.c

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
/*
  円周率 15 桁
  #define PI 3.141592653589793

  角度 (degree) からラジアン (radian) に変換
  double radian = degree * PI / 180.0;


  ラジアン (radian) から角度 (degree) に変換
  double degree = radian * 180.0 / PI;
*/