確認環境
$ g++ --version
g++ (Homebrew GCC 9.2.0) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
調査
test.cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
cout << fabs(12.3) << endl;
cout << fabs(-12.3) << endl;
cout << abs(12.3) << endl;
cout << abs(-12.3) << endl;
}
出力結果
12.3
12.3
12.3
12.3
fabs
戻り値は正確で、現在の丸め方式には依存しない。
abs
任意の整数型に対するオーバーロードが C++11 で追加されたが、ある種の問題を引き起こすことから、今後削除される可能性がある。Validity and return type of std::abs(0u) is unclear 参照。
abs を使っても同じ結果を取得できましたが、とあるので、fabs を使った方が良さそうです。