当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C语言 fma用法及代码示例


C语言math头文件(math.h)中fma函数的用法及代码示例。

用法:

     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);
Multiply-add
返回x*y+z

该函数在不损失任何中间结果精度的情况下计算结果。

可以在实现中定义以下宏常量,以信号表示此函数通常在执行以下操作中的算术运算后提供效率上的改进x*y+z(例如,使用硬件multiply-add指令时):

描述
FP_FAST_FMA对于类型的参数double,它的执行速度通常约等于或快于x*y+z
FP_FAST_FMAF对于类型的参数float,它的执行速度通常约等于或快于x*y+z
FP_FAST_FMAL对于类型的参数long double,它的执行速度通常约等于或快于x*y+z

标头<tgmath.h>提供此函数的type-generic宏版本。
额外的过载在此头文件中提供(<cmath>)的其他组合算术类型(Type1Type2Type3):这些重载有效地将其参数转换为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

相关用法


注:本文由纯净天空筛选整理自C标准库大神的英文原创作品 C fma function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。