fdimfdimffdiml

1 番目と 2 番目の値の間の正の値の差を求めます。

構文

double fdim(
   double x,
   double y
);

float fdim(
   float x,
   float y
); //C++ only

long double fdim(
   long double x,
   long double y
); //C++ only

float fdimf(
   float x,
   float y
);

long double fdiml(
   long double x,
   long double y
);

#define fdim(X) // Requires C11 or higher

パラメーター

x
最初の値。

y
2 番目の値。

戻り値

xy の間の正の値の差を返します。

戻り値 シナリオ
x-y if x>y
0 x< = y の場合

それ以外の場合は、次のエラーのいずれかを返すことがあります。

問題点 Return
オーバーフロー範囲エラー +HUGE_VAL、+HUGE_VALF、または +HUGE_VALL
アンダーフロー範囲エラー 丸めた後の正確な値
x または y は NaN NaN

エラーは、_matherr で指定されたとおりに報告されます。

解説

C++ ではオーバーロードが可能であるため、fdim 型および float 型を受け取って返す long double のオーバーロードを呼び出すことができます。 C プログラムでは、<tgmath.h> マクロを使用してこの関数を呼び出す場合を除き、fdim では常に double を受け取って返します。

<tgmath.h>fdim() マクロを使用する場合は、引数の型によって、この関数のどのバージョンが選択されるかが決定されます。 詳細については、「ジェネリック型数値演算」を参照してください。

NaN の処理を除くと、この関数は fmax(x - y, 0) と同じです。

要件

機能 C ヘッダー C++ ヘッダー
fdimfdimffdiml <math.h> <cmath>
fdim マクロ <tgmath.h>

互換性の詳細については、「 Compatibility」を参照してください。

関連項目

関数リファレンス (アルファベット順)
fmaxfmaxffmaxl
abslabsllabs_abs64