fma函数用法详解
fma函数简介
- 头文件包含
#include <math.h>
- 函数定义
double fma(double x , double y , double z );
float fmaf(float x , float y , float z );
long double fmal(long double x , long double y , long double z );
- 编译链接选项
-lm
fma函数常见使用错误
- 链接错误
undefined reference to `fma'
解决办法:添加链接选项
-lm
- 编译错误
warning: implicit declaration of function ‘fma’ [-Wimplicit-function-declaration]
解决办法:包含头文件
#include <math.h>
fma函数详细描述
这些函数计算x " * " y " + " z ,根据当前舍入模式将结果舍入为一个三值运算(请参见fenv (3))
fma函数返回值
这些函数返回x " * " y " + " z 的值,舍入为一个三进制运算。
如果x或y是NaN,则返回NaN。
如果x乘以y是精确的无穷大,而z是带有相反符号的无穷大,则发生域错误,并返回NaN。
如果x或y中的一个是无穷大,另一个是0,并且z不是NaN,则发生域错误,并返回NaN。
如果x或y中的一个是无穷大,另一个是0,并且z是NaN,则发生域错误,并返回NaN。
如果x乘以y不是无穷乘以零(反之亦然),并且z是NaN,则返回NaN。
如果结果溢出,则发生范围错误,并返回带正确符号的无穷大。
如果结果下溢,则发生范围错误,并返回带符号的0。
fma函数错误码
有关如何确定调用这些函数时是否发生错误的信息,请参见math_error (7)。
可能出现以下错误:
- 域错误:xy+z、\或PPPP1PPPP2无效且PPPP3不是NaN。引发无效浮点异常( FE_INVALID )。
- 范围错误:结果溢出引发溢出浮点异常( FE_OVERFLOW )。
- 范围错误:结果下溢引发下溢浮点异常( FE_UNDERFLOW )。
这些函数不设置errno
评论区