Page 9 --- コンピュータに計算させる --- 高等数学

math.h

math.hを使用すれば、三角・指数・対数関数が使用できるようになります。下はmath.hを使用したプログラムの一例です。

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

int main(){
	double a;
	a = sin(3.14159 / 2);
	printf("sin(90deg) = %lf\n",a);
	return 0;
}

注意:math.hを使用したプログラムを作成するためには数学ライブラリを必要とするため、コンパイルオプションに「-lm」が必要となります。

gcc ソースファイル名 -lm

プログラム名も指定する場合は次のようになります。

gcc プログラム名 ソースファイル名 -o -lm

三角関数

sin()、cos()、tan()などが使用できます。逆三角関数(アークサインなど)はasin()、acos()、atan()、双曲線関数(ハイパボリックサインなど)はsinh()、cosh()、tanh()となります。

double sin(数値)

これら三角関数で使用する数値はラジアン単位です。角度から計算する場合は、角度を180で割り、円周率を掛けます。

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

int main(){
	double a;
	a = acos(-1);
	printf("pi = %lf\n",a);
	return 0;
}

指数・対数関数

指数関数はpow()やexp()、対数関数はlog()やlog10()などが使用できます。

pow()は引数を二つ、底と指数をとります。exp()はeを底とする指数関数の値を返します。

log()はeを底とした自然対数、log10()は10を底とした常用対数の値を返します。

なお、pow(2,2)は2*2と同じ値を返しますが、計算速度は後者の方が圧倒的に速いです。次のプログラムの実行結果を比較してみましょう

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

int main(){
	double a;
	int i;
	printf("Start\n");
	for(i = 0; i < 100000000; i++){
		a = pow(2,2);
	}
	printf("End\n");
	return 0;
}
#include <stdio.h>
#include <math.h>

int main(){
	double a;
	int i;
	printf("Start\n");
	for(i = 0; i < 100000000; i++){
		a = 2*2;
	}
	printf("End\n");
	return 0;
}

以下、数学関数を使用した例で、全て1になります。

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

int main(){
	double a;
	a = cos(0);
	printf("%lf\n",a);
	return 0;
}
#include <stdio.h>
#include <math.h>

int main(){
	double a;
	a = exp(0);
	printf("%lf\n",a);
	return 0;
}
#include <stdio.h>
#include <math.h>

int main(){
	double a;
	a = log10(10);
	printf("%lf\n",a);
	return 0;
}
#include <stdio.h>
#include <math.h>

int main(){
	double a;
	a = pow(10, 0);
	printf("%lf\n",a);
	return 0;
}

戻る