3 <<fma>>, <<fmaf>>---floating multiply add
11 double fma(double <[x]>, double <[y]>, double <[z]>);
12 float fmaf(float <[x]>, float <[y]>, float <[z]>);
15 The <<fma>> functions compute (<[x]> * <[y]>) + <[z]>, rounded as one ternary
16 operation: they compute the value (as if) to infinite precision and round once
17 to the result format, according to the rounding mode characterized by the value
18 of FLT_ROUNDS. That is, they are supposed to do this: see below.
21 The <<fma>> functions return (<[x]> * <[y]>) + <[z]>, rounded as one ternary
25 This implementation does not provide the function that it should, purely
26 returning "(<[x]> * <[y]>) + <[z]>;" with no attempt at all to provide the
27 simulated infinite precision intermediates which are required. DO NOT USE THEM.
29 If double has enough more precision than float, then <<fmaf>> should provide
30 the expected numeric results, as it does use double for the calculation. But
31 since this is not the case for all platforms, this manual cannot determine
32 if it is so for your case.
43 #ifndef _DOUBLE_IS_32BITS
46 double fma(double x
, double y
, double z
)
54 /* Implementation defined. */
58 #endif /* _DOUBLE_IS_32BITS */
60 #endif /* !HAVE_FAST_FMA */