.- .
将两个值相乘,再加上第三个值,然后对结果进行四舍五入,而由于中间取整,只会损失少量精度。
语法
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。
否则,可能返回以下值之一:
问题 | 返回值 |
---|---|
x = INFINITY、y = 0 或x = -0、y = INFINITY |
NaN |
x 或 y = 精确 ± INFINITY,z = 具有相反符号的 INFINITY |
NaN |
x 或 y = NaN |
NaN |
非(x = 0,y = 不定值)和 z = NaN非( x = 不定值,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++ 标头 |
---|---|---|
.- . | <math.h> | <cmath> |
fma 宏 |
<tgmath.h> |
有关兼容性的详细信息,请参阅 兼容性。
另请参阅
按字母顺序显示的函数参考
.- .
.- .