三角関数を計算する関数の作り方
プログラミングの世界では、数学の知識が直接役立つことがよくあります。
特に、三角関数は様々な場面で使われます。
しかし、C言語の標準ライブラリには三角関数を計算する関数が用意されていますので、普段はそれを使います。
しかし、それらの関数がどのように計算されているのか、自分で実装してみることで理解を深めることができます。
この記事では、C言語でサイン、コサイン、タンジェントの三角関数を自作する方法を学びます。
これらの関数を自作することで、プログラミングと数学の関連性をより深く理解することができます。
三角関数を計算する関数の作り方
C言語には標準で三角関数を計算するための関数が用意されていますが、今回はそれらを使わずに自作の関数で三角関数を計算してみましょう。
ここでは、サイン、コサイン、タンジェントの三つの関数を作成します。
サイン関数の実装
※sin関数
は使わない
まずはサイン関数から始めます。
サイン関数はテイラー展開を用いて近似的に計算することができます。
以下にその実装例を示します。
#include <stdio.h>
double my_sin(double radian) {
double result = radian;
double term = radian;
int i;
for (i = 1; i <= 10; i++) {
term *= -1 * radian * radian / ((2 * i) * (2 * i + 1));
result += term;
}
return result;
}
int main() {
double x = 0.5;
printf("sin(%f) = %f\n", x, my_sin(x));
return 0;
}
このプログラムを実行すると、sin(0.5) = 0.479426
と表示されます。
コサイン関数の実装
※cos関数
は使わない
次にコサイン関数を実装します。
コサイン関数もテイラー展開を用いて近似的に計算することができます。
以下にその実装例を示します。
#include <stdio.h>
double my_cos(double radian) {
double result = 1.0;
double term = 1.0;
int i;
for (i = 1; i <= 10; i++) {
term *= -1 * radian * radian / ((2 * i - 1) * (2 * i));
result += term;
}
return result;
}
int main() {
double radian = 0.5;
printf("cos(%f) = %f\n", radian, my_cos(radian));
return 0;
}
このプログラムを実行すると、cos(0.5) = 0.877583
と表示されます。
タンジェント関数の実装
※tan関数
は使わない
最後にタンジェント関数を実装します。
タンジェント関数はサイン関数とコサイン関数の比で計算することができます。
以下にその実装例を示します。
#include <stdio.h>
double my_sin(double radian) {
double result = radian;
double term = radian;
int i;
for (i = 1; i <= 10; i++) {
term *= -1 * radian * radian / ((2 * i) * (2 * i + 1));
result += term;
}
return result;
}
double my_cos(double radian) {
double result = 1.0;
double term = 1.0;
int i;
for (i = 1; i <= 10; i++) {
term *= -1 * radian * radian / ((2 * i - 1) * (2 * i));
result += term;
}
return result;
}
double my_tan(double radian) {
return my_sin(radian) / my_cos(radian);
}
int main() {
double radian = 0.5;
printf("tan(%f) = %f\n", radian, my_tan(radian));
return 0;
}
このプログラムを実行すると、tan(0.5) = 0.546302
と表示されます。
以上が、C言語で三角関数を計算する関数を自作する方法です。
これらの関数は近似的な計算を行っているため、精度が必要な場合は標準の関数を使用することをお勧めします。