【C言語入門】絶対値を計算する関数の使い方(abs/labs/fabsf/fabs)

数学でよく使われる絶対値は聞いたことがありますか?絶対値は負の値を取らないので、二つの値の差を調べたいときなどに便利です。

C言語では絶対値を計算するためのabs関数などがあるので簡単に求めることができます。

この記事では、絶対値とは

  • abs関数でint型の絶対値を計算する方法
  • labs関数でlong型の絶対値を計算する方法
  • fabsf関数でfloat型の絶対値を計算する方法
  • fabs関数でdouble型の絶対値を計算する方法
  • 絶対値の関数をabs関数を使わずに自作する方法


までの基本的な内容から、応用的な内容までに関しても解説していきます。

目次

絶対値とは

絶対値とは簡単にいうと、数値からマイナスを取ってプラスの値を得たいときに使います。数学では、絶対値は 「|a|」 のように使いますが、C言語ではabs関数を使います。

実際のプログラムでは、変数の値をプラスの値で欲しいときや、二つの変数を引いた差をプラスにして欲しいときなどに使われます。

絶対値を返す関数の使い方

abs関数でint型の絶対値を計算する方法

関数が何か処理をするときには、「このデータを使って処理をしてほしい」というときに関数へ受け渡す値の「引数」と、計算した結果を返す「戻り値」というものがあります。abs関数はint型の変数を引数にします。戻り値はその引数の絶対値となります。

abs関数を使うためには、「stdlib.h」という関数のライブラリをインクルードする必要があります。それでは、実際のプログラムを見ていきましょう。

#include <stdio.h>
#include <stdlib.h>

int main(void) {
   int positive = 100;
   printf("|%d| = %d\n", positive, abs(positive));

   int negative = -100;
   printf("|%d| = %d\n", negative, abs(negative));

   return 0;
}

実行結果:

|100| = 100
|-100| = 100

このようにabs関数を使うことで、絶対値を取得することができました。

labs関数でlong型の絶対値を計算する方法

先に述べたようにabs関数はint型を引数に取るといいました。では、long型の場合にはどのようにするのでしょうか?

そこで登場するのが、labs関数です。labs関数は、long型を引数にして、その絶対値を返します。

#include <stdio.h>
#include <stdlib.h>

int main(void){
   long positive = 100000;
   printf("|%ld| = %ld\n", positive, labs(positive));

   long negative = -100000;
   printf("|%ld| = %ld\n", negative, labs(negative));

   return 0;
}

実行結果:

|100000| = 100000
|-100000| = 100000

fabsf関数でfloat型の絶対値を計算する方法

同じようにfloat型の場合は、fabsf関数を使います。ただ、今回インクルードするのは、「math.h」となっていますので気をつけてください。

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

int main() {
   float positive = 1234.5;
   printf("|%f| = %f\n", positive, fabsf(positive));

   float negative = -1234.5;
   printf("|%f| = %f\n", negative, fabsf(negative));
   return 0;
}

実行結果:

|1234.500000| = 1234.500000
|-1234.500000| = 1234.500000

fabs関数でdouble型の絶対値を計算する方法

double型の場合は、fabs関数を使って求めていきます。

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

int main() {
   double positive = 1234.5678;
   printf("|%lf| = %lf\n", positive, fabs(positive));

   double negative = -1234.5678;
   printf("|%lf| = %lf\n", negative, fabs(negative));

   return 0;
}

実行結果:

|1234.567800| = 1234.567800
|-1234.567800| = 1234.567800

abs関数を使わずに絶対値を計算する方法

ここまでabs関数について見ていきましたが、abs関数がどのような動きをしているのか見ていきましょう。

if-else文を使う方法

まずはじめに、if-else文を使ってabs関数と同じ動作をさせた場合の例を見てみましょう。

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

int my_abs(int num){
   if (num > 0)
      return num;
   else
      return -num;
}

int main(void) {
   int positive = 100;
   printf("|%d| = %d\n", positive, my_abs(positive));

   int negative = -100;
   printf("|%d| = %d\n", negative, my_abs(negative));

   return 0;
}

実行結果:

|100| = 100
|-100| = 100

このプログラムでは、if-else文を使って値が0よりも大きい場合は、値をそのまま返して、逆に0よりも小さい場合にはマイナスをかけることで正の値にします。

三項演算子を使う方法

三項演算子を用いると1行で書くこともできます。三項演算子とは、if-else文を短く書くことができる演算子となっています。

三項演算子を使うと、

条件式 ? 真の場合の処理 : 負の場合の処理

と書くことができます。

三項演算子を用いて1行で書く方法を次のプログラムで確認してみましょう。

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

int my_abs(int num){
   return (num > 0) ? num : -num;
}

int main(void) {
   int positive = 100;
   printf("|%d| = %d\n", positive, my_abs(positive));

   int negative = -100;
   printf("|%d| = %d\n", negative, my_abs(negative));

   return 0;
}

実行結果:

|100| = 100
|-100| = 100

このようにif-else文を三項演算子に置き換えて、1行で書くことができました。

絶対値のまとめ

いかがだったでしょうか?今回はabs関数などを使って絶対値を求める方法を解説しました。絶対値は負の値を取らないので、二つの値の差を調べるときなどに使用してください。

もし、絶対値を求める方法を忘れてしまったらこの記事を確認してください。

この記事を書いた人

ご閲覧いただきありがとうございます。森田一世と申します。プログラマーとしてRaspberry piを使ったり、記事を作成しています。

目次