ユーニックス総合研究所

  • home
  • archives
  • c-abs

C言語のabs関数で絶対値を求める方法【abs, labs, llabs, imaxabs, fabs, fabsf, fabsl】

  • 作成日: 2022-06-16
  • 更新日: 2024-03-24
  • カテゴリ: C言語

C言語のabs関数で絶対値を求める方法

C言語では絶対値を求めるのにabs系の関数を使います。
絶対値とは負数を含んだ整数からマイナスを取った値のことを言います。

この記事では↓の関数について解説します。

  • abs関数 ... int型の絶対値を求める
  • labs関数 ... long int型の絶対値を求める
  • llabs関数 ... long long int型の絶対値を求める
  • imaxabs関数 ... intmax_t型の絶対値を求める
  • fabs関数 ... double型の絶対値を求める
  • fabsf関数 ... float型の絶対値を求める
  • fabsl関数 ... long double型の絶対値を求める

絶対値は座標の計算などにも使われます。
そのためabs系の関数はわりと利用頻度の高い関数です。

では解説していきます。

C言語や他の言語を扱うYoutubeも公開しています。
興味がある方は以下のリンクからご覧ください。

Youtubeの当チャンネル

abs(), labs(), llabs()の使い方

これらの関数は↓のように使います。
関数を使うにはstdlib.hのインクルードが必要です。

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

int main(void) {  
    // int型の絶対値を求める  
    int a = abs(-1);  
    printf("%d\n", a);  // 1  

    // long int型の絶対値を求める  
    long int b = labs(-1);  
    printf("%ld\n", b);  // 1  

    // long long int型の絶対値を求める  
    long long int c = llabs(-1);  
    printf("%lld\n", c);  // 1  

    return 0;  
}  

printf()ですがint型の変数は%dで出力します。
long int型の変数は%ldです。
long long int型の変数は%lldになります。

上記の関数の結果を見ると-1という値からマイナスが取れて正数になっているのがわかります。
これが絶対値の表現です。
ちなみにマイナスを含まない正数を関数に与えた場合はそのまま返ってきます。

絶対値はゲームプログラミングをはじめ様々な分野で使われます。
ですので絶対値について理解しておくことはプログラミングをする上で無駄になりません。

imaxabs()の使い方

imaxabs関数はintmax_t型の絶対値を求めます。
この関数を使うにはinttypes.hのインクルードが必要です。

intmax_t型はC99から追加された型です。
整数の最大幅を表現します。

#include <stdio.h>  
#include <inttypes.h>  

int main(void) {  
    intmax_t a = imaxabs(-1);  
    printf("%ld\n", a);  // 1  
    return 0;  
}  

fabs(), fabsf(), fabsl()の使い方

これらの関数はmath.hのインクルードが必要です。

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

int main(void) {  
    // double型の絶対値を求める  
    double a = fabs(-1.0);  
    printf("%lf\n", a);  // 1.000000  

    // float型の絶対値を求める  
    float b = fabsf(-1.0f);  
    printf("%f\n", b);  // 1.000000  

    // long double型の絶対値を求める  
    long double c = fabsl(-1.0);  
    printf("%Lf\n", c);  // 1.000000  

    return 0;  
}  

printf()ですがdouble型は%lfで出力します。
float型は%fです。
long double型は%Lfになります。

これらの書式指定子はコンパイラが警告してくれることもあります。
適当な指定子を使わないあるいは間違えた場合は正しい値が出力されなくなることがあります。
この辺は浮動小数点数を使う際に注意が必要です。

if文で絶対値を求める

if文で絶対値を求めることもできます。
たとえばint型の変数の絶対値を求めるには↓のようにコードを書きます。

#include <stdio.h>  

int main(void) {  
    int i = -1;  

    if (i < 0) {  
        i = -i;  
    }  

    printf("%d\n", i);  // 1  

    return 0;  
}  

関連記事
C言語のif文の書き方【if, else if, else】

三項演算子で絶対値を求める

三項演算子でも絶対値を求めることができます。
int型の変数の絶対値を三項演算子で求める場合は↓のようにコードを書きます。

#include <stdio.h>  

int main(void) {  
    int i = -1;  

    i = i < 0 ? -i : i;  

    printf("%d\n", i);  // 1  

    return 0;  
}  

関連記事
C言語のはてな(?)を使った三項演算子の書き方

絶対値を求める自作マクロ関数を作る

三項演算子を利用して自作のマクロ関数を作ることもできます。
その場合は↓のように定義します。

#include <stdio.h>  

#define ABS(n) (n < 0 ? -n : n)  

int main(void) {  
    printf("%d\n", ABS(-1));  // 1  

    return 0;  
}  

おわりに

今回はC言語のabs系の関数などで絶対値を求める方法を解説しました。
絶対値は結構よく使うので覚えておいて損はないです。

🦝 < 絶対値で距離を求める

🐭 < 0からの距離