Abs

absは、多くのプログラミング言語において引数の絶対値 (absolute value) を返す関数である。言語によってabs, Abs, ABSなどと大文字小文字に表記ゆれがあったり、多少の修飾辞を伴っていたりする場合もある。例えばFortranの場合、引数の型によってABS, IABSなど、異なる名前の関数が用意されている。

 C/C++ 
C/C++ではヘッダーファイル<stdlib.h>および<cstdlib>の中で、次のように関数absが宣言されている。ただし、後述するようにこれ以外にもいくつか種類が存在する。
int abs(int);
そして、例えば次のように使用できる。
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int x = -5;
    int abs_x = abs(x);
    printf("%dの絶対値は%d\n", x, abs_x);
    return 0;
}
出力結果:
-5の絶対値は5
なお、符号付整数型に2の補数を用いる処理系でabs(INT_MIN)を実行する場合など、結果が表現できない場合の動作はC言語の仕様上は未定義であるJISC 日本工業標準調査会 JIS X3010 プログラム言語C。が、GCCなどの典型的な実装では（絶対値ではない）元の値をそのまま返す。

 absの種類 
C/C++の場合、Fortran同様に引数の型によって異なる名前の関数が用意されている。ただしC++ではabsがそれぞれの型に対して多重定義されているので、異なる型に対して一律absを使用することもできる。

 関数名  型  宣言ヘッダー  備考 abs  int（整数型）  <stdlib.h>, <cstdlib>   labs  long（長整数型）  <stdlib.h>, <cstdlib>   llabs  long long（長々整数型）  <stdlib.h>, <cstdlib>  C99、C++11で標準化。 imaxabs  intmax_t（処理系が扱える最大の整数型）  <stdlib.h>, <cstdlib>  C99、C++11で標準化。 fabs  double（倍精度浮動小数点数型）  <math.h>, <cmath>   fabsf  float（単精度浮動小数点数型）  <math.h>  C99で標準化。 fabsl  long double（拡張倍精度浮動小数点数型）  <math.h>  C99で標準化。 cabs  double complex（倍精度複素数型、C99のみ）  <complex.h>  C99で標準化。 cabsf  float complex（単精度複素数型、C99のみ）  <complex.h>  C99で標準化。 cabsl  long double complex（拡張倍精度複素数型、C99のみ）  <complex.h>  C99で標準化。 abs  complex<T>（複素数型テンプレート、C++のみ）  <complex>   abs  valarray<T>（ベクトル演算対応配列型テンプレート、C++のみ）  <valarray>  

 実装例 
C言語におけるabs関数の典型的な実装例は以下である。
int my_abs(int x) {
    if (x < 0)
        return -x;
    else
        return x;
}
もしくは、マクロを用いればC言語でも型を気にせずに用いることが可能となる。しかし副作用に注意する必要性が生じる。以下の構文は条件演算子を用いている。
#define my_abs(x) ((x) >= 0 ? (x) : -(x))
C99ではジェネリック版のfabs関数が<tgmath.h>に宣言されている。

 Java 
java.lang.Math.abs() にて実装されている。int, long, float, double 用に多重定義されている。int, long の負数の最小値を引数に与えると同じ値をそのまま返すと規定されている。

 .NET 
C#を始めとする.NET Frameworkに対応した言語では、System.Math.Abs() にて実装されている。System.SByte, System.Int16, System.Int32, System.Int64, System.Decimal, System.Single, System.Double 用に多重定義されている。SByte.MinValue, Int16.MinValue, Int32.MinValue, Int64.MinValue をそれぞれのメソッドオーバーロードに渡すと System.OverflowException 例外がスローされる。

 脚注 

 外部リンク 


Category:標準Cライブラリ
ABS