fma , fmaf , fmal 和 fmad128 子例程

用途

浮点乘-加。

语法

#include <math.h>

double fma (x, y, z)
double x;
double y;
double z;

float fmaf (x, y, z)
float x;
float y;
float z;

long double fmal (x, y, z)
long double x;
long double y;
long double z;

_Decimal128 fmad128 (x, y, z)
_Decimal128 x;
_Decimal128 y;
_Decimal128 z;

描述

法马弗马夫菲马尔fmad128 子例程计算 (X * Y) + Z,取整为一个三元运算。 它们根据以 FLT_ROUNES 值为特征的舍入方式计算值 (如假设) 为无限精度,并对结果格式进行一次舍入。

希望检查错误情况的应用程序应该将 错误号 全局变量设置为零,并在调用这些子例程之前调用 费克莱雷克斯普(FE_ALL_EXCEPT)。 返回时,如果 错误号 为非零或 费泰斯特西普(FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW) 为非零,那么表示发生了错误。

参数

描述
X 指定要与 Y 参数相乘的值。
y 指定要与 X 参数相乘的值。
z 指定要添加到 XY 参数的乘积中的值。

返回值

成功完成后, 法马弗马夫菲马尔fmad128 子例程将返回 (X * Y) + Z,舍入为一个三元运算。

如果xy为NaN,返回NaN。

如果 x 乘以 y 是精确的无穷大,并且 z 也是无穷大但带有相反符号,那么将发生域错误,并返回 NaN 。

如果xy参数中的一个为无限大,另一个为零,且z参数不是NaN,发生域错误,并返回NaN。

如果xy参数之一为无限大,另一个为零,而z为NaN,返回NaN,并可能出现域错误。

If x*y is not 0*Inf nor Inf*0 and z is a NaN, a NaN is returned.