fma
, fmaf
, fmal
2 つの値を乗算し、3 番目の値を加算した後、結果を丸めますが、中間の丸めによって精度が低下するのはごくわずかです。
構文
double fma(
double x,
double y,
double z
);
float fma(
float x,
float y,
float z
); //C++ only
long double fma(
long double x,
long double y,
long double z
); //C++ only
float fmaf(
float x,
float y,
float z
);
long double fmal(
long double x,
long double y,
long double z
);
#define fma(X, Y, Z) // Requires C11 or higher
パラメーター
x
乗算する 1 番目の値。
y
乗算する 2 番目の値。
z
加算する値。
戻り値
約 (x * y) + z
を返します。 その後、戻り値は現在の丸め形式を使用して丸められますが、多くの場合、正しく丸められた結果が返されるため、正しい値から最大 5 分の 1 の ulp で値が不正確になる可能性があります。
それ以外の場合は、次の値のいずれかを返します。
問題 | Return |
---|---|
x = INFINITY、y = 0 またはx = 0、y = INFINITY |
NaN |
x または y = 正確な± INFINITY、 z = 反対の符号を持つ INFINITY |
NaN |
x または y = NaN |
NaN |
not (x = 0, y = indefinite) および z = NaNnot ( x =indefinite, y =0) および z = NaN |
NaN |
オーバーフロー範囲エラー | HUGE_VAL ±、±HUGE_VALF 、または±HUGE_VALL |
アンダーフロー範囲エラー | 丸めた後の正確な値。 |
エラーは次で指定したとおりに _matherr
報告されます。
解説
C++ ではオーバーロードが可能であるため、fma
型および float
型を受け取って返す long double
のオーバーロードを呼び出すことができます。 C プログラムでは、tgmath.h マクロを<使用してこの関数を呼び出していない限り、fma
常に double
.>
<tgmath.h>fma()
マクロを使用する場合は、引数の型によって、この関数のどのバージョンが選択されるかが決定されます。 詳細については、「ジェネリック型数値演算」を参照してください。
この関数は、値を無限の精度とするかのように計算し、最終的な結果を丸めます。
既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT のグローバル状態」を参照してください。
必要条件
機能 | C ヘッダー | C++ ヘッダー |
---|---|---|
fma , fmaf , fmal |
<math.h> | <cmath> |
fma マクロ |
<tgmath.h> |
互換性の詳細については、「 Compatibility」を参照してください。
関連項目
アルファベット順関数リファレンス
remainder
, remainderf
, remainderl
remquo
, remquof
, remquol
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示