當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。