C++で数値の絶対を求めるにはabs関数を使用します。abs関数には、扱う型によっていくつかのものが多重定義されています。使用するヘッダも異なりますので注意が必要です。
整数
整数の絶対値を求めるには<cstdlib>ヘッダをインクルードします。
0 1 2 3 4 5 6 7 8 9 10 |
#include <iostream> #include <cstdlib> int main() { int value; std::cin >> value; std::cout << std::abs(value) << std::endl; } |
整数用のabs関数では、実引数がその型の表現範囲における最小値(int 型ではINT_MIN)の場合には未定義の動作を引き起こすことがあります。この現象は、負の値の内部表現が2の補数の場合に起こります(現存する処理系のほぼすべてが該当します)。
整数用のabs関数としては、int型版とlong型版があります。long型版を明示的に呼び出すにはlabs関数を使うこともできます。C++11以降であれば、long long型版のabs関数もあります。long long型版を明示的に呼び出すにはllabs関数を使うこともできます。
浮動小数点数
浮動小数点数用のabs関数を呼び出すには、<cmath>ヘッダをインクルードします。
0 1 2 3 4 5 6 7 8 9 10 |
#include <iostream> #include <cmath> int main() { double value; std::cin >> value; std::cout << std::abs(value) << std::endl; } |
浮動小数点数用のabs関数としては、float型版、double型版、long double型版の3種類が多重定義されています。abs関数の代わりにfabs関数を使った場合も同じ意味になります。
複素数
複素数すなわちcomplexクラステンプレート用のabs関数は、complexクラステンプレートと同じ<complex>ヘッダで宣言されています。
0 1 2 3 4 5 6 7 8 9 10 |
#include <iostream> #include <complex> int main() { std::complex<double> value; std::cin >> value; std::cout << std::abs(value) << std::endl; } |
実引数依存の名前検索が働きますので、std::absではなく、単にabsとするだけでも呼び出すことができます。