fma
, , fmaf
fmal
두 값을 함께 곱하고, 세 번째 값을 추가한 다음, 중간 반올림으로 인해 약간의 정밀도만 손실하면서 결과를 반올림합니다.
구문
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
곱할 첫 번째 값입니다.
y
곱할 두 번째 값입니다.
z
추가할 값입니다.
반환 값
약을 반환합니다 (x * y) + z
. 반환 값은 현재 반올림 형식을 사용하여 반올림되지만 대부분의 경우 올바르지 않은 결과를 반환하므로 값이 올바른 값에서 최대 절반의 ulp까지 부정확할 수 있습니다.
그렇지 않으면 다음 값 중 하나를 반환할 수 있습니다.
문제 | Return |
---|---|
x = INFINITY, y = 0 또는x = 0, y = INFINITY |
NaN |
x or 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> |
호환성에 대한 자세한 내용은 호환성을 참조하세요.
참고 항목
사전순 함수 참조
remainder
, , remainderf
remainderl
remquo
, , remquof
remquol