C言語のabs関数で絶対値を求める方法【abs, labs, llabs, imaxabs, fabs, fabsf, fabsl】
目次
- C言語のabs関数で絶対値を求める方法
- abs(), labs(), llabs()の使い方
- imaxabs()の使い方
- fabs(), fabsf(), fabsl()の使い方
- if文で絶対値を求める
- 三項演算子で絶対値を求める
- 絶対値を求める自作マクロ関数を作る
- おわりに
C言語のabs関数で絶対値を求める方法
C言語では絶対値を求めるのにabs系の関数を使います。
絶対値とは負数を含んだ整数からマイナスを取った値のことを言います。
この記事では↓の関数について解説します。
abs関数 ... int型の絶対値を求める
labs関数 ... long int型の絶対値を求める
llabs関数 ... long long int型の絶対値を求める
imaxabs関数 ... intmax_t型の絶対値を求める
fabs関数 ... double型の絶対値を求める
fabsf関数 ... float型の絶対値を求める
fabsl関数 ... long double型の絶対値を求める
絶対値は座標の計算などにも使われます。
そのためabs系の関数はわりと利用頻度の高い関数です。
では解説していきます。
関連記事
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; }
三項演算子で絶対値を求める
三項演算子でも絶対値を求めることができます。
int型の変数の絶対値を三項演算子で求める場合は↓のようにコードを書きます。
#include <stdio.h> int main(void) { int i = -1; i = i < 0 ? -i : i; printf("%d\n", i); // 1 return 0; }
絶対値を求める自作マクロ関数を作る
三項演算子を利用して自作のマクロ関数を作ることもできます。
その場合は↓のように定義します。
#include <stdio.h> #define ABS(n) (n < 0 ? -n : n) int main(void) { printf("%d\n", ABS(-1)); // 1 return 0; }
おわりに
今回はC言語のabs系の関数などで絶対値を求める方法を解説しました。
絶対値は結構よく使うので覚えておいて損はないです。
(^ _ ^) | 絶対値で距離を求める |
(・ v ・) | 0からの距離 |