C言語の標準ライブラリmath.h
には平方根を簡単に計算できるsqrt関数
が用意されています。
そのため、平方根を求めたいだけなら以下の一行で完了します。
sqrt(12);
ですが、sqrt関数を使わずに平方根を求めるとなるとどうでしょうか。
この場合は自分で平方根を求める数式をプログラム化する必要があります。
平方根の公式を知っているから簡単と思っても、手計算するときは答えを√2
のように表記するので、いざプログラム化するとなるとどうすればいいのか分からないという方も多いのではないでしょうか。
今回は、C言語で平方根を計算するプログラムを自作する方法を解説しています。
目次から探す
サンプルコード
こちらは標準ライブラリを一切使わずに平方根を求めるサンプルです。負数対応。
#define E 0.000001
double my_sqrt(double a)
{
a = a < 0 ? -a : a;
double x = a / 2;
while (1) {
double e = x * x - a;
double t = e < 0 ? -e : e;
if (t < E) return x;
x -= e / (x * 2);
}
}
int main() {
my_sqrt(-4);
my_sqrt(4);
my_sqrt(3);
my_sqrt(-3);
return 0;
}
平方根を求める方法は複数ありますが、上記サンプルはニュートン法を用いた方法です。
数式の意味を理解するにはプログラミングより数学的な知識が必要なので、数学を専門に扱っている参考書・ウェブサイトを見たほうが手っ取り早いでしょう。
ニュートン法の仕組みと証明の仕方を分かりやすく解説
近似値の計算などで用いられるニュートン法の仕組みと、その証明を具体的な問題を使って解説しています。理系受験生と機械学習を学んでいる方は必見です。
基本的には最適化されているsqrt関数を呼び出す方法がベターですが、どうしてもsqrt関数を自作する必要があるケースでは、上記サンプルを用いるといいでしょう。