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 later
パラメーター
x
最初の値。
y
2 番目の値。
戻り値
x と y の間の正の値の差を返します。
| 戻り値 | シナリオ |
|---|---|
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++ ヘッダー |
|---|---|---|
| <math.h> | <cmath> | |
fdim マクロ |
<tgmath.h> |
互換性の詳細については、「 Compatibility」を参照してください。