Home C&C++函数库 c++ 语法 程序源码 Linux C库

fma

函数  <cmath> <ctgmath>

C99 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);
C++11 double fma (double x , double y , double z);
float fma (float x , float y , float z);
long double fma (long double x, long double y, long double z);
double fma (Type1 x , Type2 y , Type3 z);    // additional overloads

加乘积
返回 x*y+z.
该函数计算结果时不会损失任何中间结果的精度。

可以在实现中定义以下宏常量,以表明该函数比在x*y+z中执行算术运算 (例如,当使用硬件乘法-加法指令时))提供效率改进:
说明
FP_FAST_FMA 对于double类型的参数,它的执行速度通常与x*y+z差不多,甚至更快。
FP_FAST_FMAF 对于float类型的参数,它的执行速度通常与x*y+z差不多,甚至更快。
FP_FAST_FMAL 对于long double类型的参数,它的执行速度通常与x*y+z差不多,甚至更快。

C99 头文件<tgmath.h> 提供了该函数的泛型类型宏版本。
C++11 这个头文件(<cmath>)为其它算术类型组合提供了额外的重载 (Type1,Type2和Type3):这些重载在计算前将其参数转换为double, 除非至少一个参数的类型是long double(在这种情况下,它们都被转换为long double)。

☲  参数


x ,y
乘数
z
加数

☉  返回值



x*y+z 的结果

☣  示例



/* fma example */
#include <stdio.h>      /* printf */
#include <math.h>       /* fma, FP_FAST_FMA */

int main ()
{
  double x,y,z,result;
  x = 10.0, y = 20.0, z = 30.0;

#ifdef FP_FAST_FMA
  result = fma(x,y,z);
#else
  result = x*y+z;
#endif

  printf ("10.0 * 20.0 + 30.0 = %f\n", result);
  return 0;
}

输出:
10.0 * 20.0 + 30.0 = 230.000000

🍄  另请参阅



fmin 最小值(function )
fdim 正差(function )

联系我们 免责声明 关于CandCplus 网站地图