(Translated by https://www.hiragana.jp/)
abs - Wikipedia

absは、おおくのプログラミング言語げんごにおいて引数ひきすう絶対ぜったい (absolute value) をかえ関数かんすうである。言語げんごによってabs, Abs, ABSなどと大文字おおもじ小文字こもじれがあったり、多少たしょう修飾しゅうしょくともなっていたりする場合ばあいもある。たとえばFortran場合ばあい引数ひきすうかたによってABS, IABSなど、ことなる名前なまえ関数かんすう用意よういされている。

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言語げんご仕様しようじょう未定義みていぎである[1]が、GCCなどの典型てんけいてき実装じっそうでは(絶対ぜったいではない)もとをそのままかえす。

absの種類しゅるい

編集へんしゅう

C/C++場合ばあい、Fortran同様どうよう引数ひきすうかたによってことなる名前なまえ関数かんすう用意よういされている。ただしC++ではabsがそれぞれのかたたいして多重たじゅう定義ていぎされているので、ことなるかたたいして一律いちりつabs使用しようすることもできる。

関数かんすうめい かた 宣言せんげんヘッダー 備考びこう
abs int整数せいすうがた <stdlib.h>, <cstdlib>
labs longちょう整数せいすうがた <stdlib.h>, <cstdlib>
llabs long long長々ながなが整数せいすうがた <stdlib.h>, <cstdlib> C99C++11標準ひょうじゅん
imaxabs intmax_t処理しょりけいあつかえる最大さいだい整数せいすうがた <stdlib.h>, <cstdlib> C99C++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.lang.Math.abs() にて実装じっそうされている。int, long, float, double よう多重たじゅう定義ていぎされている。int, long の負数ふすう最小さいしょう引数ひきすうあたえるとおなをそのままかえすと規定きていされている。

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 例外れいがいがスローされる。

脚注きゃくちゅう

編集へんしゅう

外部がいぶリンク

編集へんしゅう