【C言語】abs関数を使わずに絶対値を計算するプログラムを自作する方法

C/C++

C言語ではabs関数やfabs関数などを使うことでカンタンに絶対値を計算することができます。

ですが、abs関数を使わずに絶対値を計算したい場合はどうでしょうか?

プログラミング初心者でどういう処理を組んだらいいのか分からないという方は参考にしてみてください。

絶対値を求めるプログラムを作成する

絶対値を求めるプログラムを組む前に、どういう要件を満たせばいいのか整理しましょう。

  • 数値が正の値なら、変換する必要なし
  • 数値が負の値なら、正の値に変換する

この2つの要件を満たす必要があります。

一番カンタンなプログラム

絶対値を求める一番簡単な方は、if文を使ってマイナスの値だけ符号を変換する方法です。

int abs(int a) {
  if (a < 0) {
    a *= -1;
  }
  return a;
}

プラスマイナスは、-1を掛けることによって入れ替えることができるので、if文を使ってマイナスの値だけ-1を掛けるようにすると絶対値を計算できます。

マクロを活用する

やっていることは先ほどのプログラムと同じですが、マクロを使うことでも絶対値を計算することが可能です。

#define abs(a) ((a)<0 ? -(a) : (a))

こちらの方法は型に依存しないため、int型でもfloat型でも関係なく利用できます。

最初の紹介した方法はint型の引数を受け取る関数にしているため、double型やfloat型の絶対値を計算することができません。

そのため、それぞれの型に対応した絶対値計算用関数を作成するとなると、このようになってしまいます。

int abs_i(int a) {
  if (a < 0) {
    a *= -1;
  }
  return a;
}

int abs_d(double a) {
  if (a < 0) {
    a *= -1;
  }
  return a;
}

int abs_f(float a) {
  if (a < 0) {
    a *= -1;
  }
  return a;
}

ですが、マクロ使えばそれぞれの方に対応した関数を作らずとも、1つのabsマクロ関数だけで問題ありません。

abs(10);	//OK
abs(3.14);	//OK
abs(2.0f);	//OK

行数を減らせる賢い方法ですので、C言語標準ライブラリーのabs関数を使いたくないのであれば、絶対値を求めるマクロ関数を作成すると良いでしょう。

Acceliv