std::abs(float), std::fabs, std::fabsf, std::fabsl
From cppreference.com
| ヘッダー <cmath> で定義 |
||
| ヘッダ <cstdlib> で定義 |
||
| (1) | ||
float abs( float num ); double abs( double num ); |
(C++23まで) | |
| constexpr /* floating-point-type */ abs( /* floating-point-type */ num ); |
(C++23から) | |
| ヘッダー <cmath> で定義 |
||
| (2) | ||
float fabs ( float num ); double fabs ( double num ); |
(C++23まで) | |
| constexpr /* floating-point-type */ fabs ( /* floating-point-type */ num ); |
(C++23から) | |
| float fabsf( float num ); |
(3) | (C++11以降) (C++23 以降 constexpr) |
| long double fabsl( long double num ); |
(4) | (C++11以降) (C++23 以降 constexpr) |
| 追加のオーバーロード (C++11以降) |
||
| ヘッダー <cmath> で定義 |
||
| template< class Integer > double fabs ( Integer num ); |
(A) | (C++11以降) (C++23 以降 constexpr) |
1-4)浮動小数点数 num の絶対値を計算します。C++23以降、ライブラリは、パラメータ num の型として、すべての cv-unqualified な浮動小数点型に対する
std::abs および std::fabs のオーバーロードを提供します。(since C++23)|
A) すべての整数型に対する追加のオーバーロードが提供されます。これらは double として扱われます。
|
(C++11以降) |
整数引数については、std::abs の整数オーバーロードの方が適切な場合が多いです。std::abs が、整数昇格によって int に変換できない符号なし整数引数で呼び出された場合、プログラムは不定形となります。
目次 |
[edit] Parameters
| num | - | 浮動小数点数または整数値 |
[edit] Return value
成功した場合、arg の絶対値 (|arg|) を返します。返される値は正確であり、丸めモードには依存しません。
[edit] Error handling
この関数は、math_errhandling で指定されたエラー条件のいずれにも影響されません。
実装がIEEE浮動小数点算術 (IEC 60559) をサポートしている場合、
- 引数が ±0 の場合、+0 が返されます。
- 引数が ±∞ の場合、+∞ が返されます。
- 引数が NaN の場合、NaN が返されます。
[edit] Notes
追加のオーバーロードは、(A) とまったく同じように提供される必要はありません。整数型の引数 num に対して、std::fabs(num) が std::fabs(static_cast<double>(num)) と同じ効果を持つことを保証するのに十分であればよいのです。
[edit] Example
このコードを実行
#include <cmath> #include <iostream> int main() { std::cout << "abs(+3.0) = " << std::abs(+3.0) << '\n' << "abs(-3.0) = " << std::abs(-3.0) << '\n'; // special values std::cout << "abs(-0.0) = " << std::abs(-0.0) << '\n' << "abs(-Inf) = " << std::abs(-INFINITY) << '\n' << "abs(-NaN) = " << std::abs(-NAN) << '\n'; }
実行結果の例
abs(+3.0) = 3 abs(-3.0) = 3 abs(-0.0) = 0 abs(-Inf) = inf abs(-NaN) = nan
[edit] Defect reports
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 2192 | C++98 | std::abs のオーバーロードが2つのヘッダーで一貫性のない宣言がされていた |
これらのオーバーロードを宣言した 両方のヘッダーで |
| LWG 2735 | C++11 | 整数型に対する std::abs のオーバーロードdouble を返すことが誤って要求されていた |
要件が削除されました |
[edit] See also
| (C++11) |
整数値の絶対値を計算する (|x|) (関数) |
| (C++11)(C++11)(C++11) |
浮動小数点数値の符号をコピーする (関数) |
| (C++11) |
与えられた数値が負数かチェックする (関数) |
| 複素数の大きさを返す (関数テンプレート) | |
| valarrayの各要素に関数absを適用する (function template) | |
| C のドキュメント (fabs)
| |