1

の絶対値が欲しいlong double

<cmath>またはによると<math.h>、以下が利用可能です。

     double fabs (double x);
     float fabs (float x);
     long double fabs (long double x);

ただし、実行するlong double ld = fabs(static_cast<long double>(0));と、次の警告が表示されます (LLVM 7.1):

Absolute value function 'fabs' given an argument of type 'long double' but has parameter of type 'double' which may cause truncation of value

どうして?

a の絶対値を取得する他の方法はありますlong doubleか?

編集:

std::abs最終的に仕事をしました。しかし、std::fabsしませんでした。コメントで指摘されたように、これは非準拠の実装が原因である可能性があります。

4

1 に答える 1

4

cppreference http://en.cppreference.com/w/c/numeric/math/fabsおよびhttp://en.cppreference.com/w/cpp/numeric/math/fabsfabsによると、グローバル名前空間の C バージョン引数のみを受け入れ、doubleを使用する必要がありますfabsl。ただしstd::fabs、またはstd::abs適切なlong doubleオーバーロードが必要です。

于 2016-08-09T18:33:51.137 に答える