0,0 → 1,56 |
/* |
FUNCTION |
<<fma>>, <<fmaf>>--floating multiply add |
INDEX |
fma |
INDEX |
fmaf |
|
ANSI_SYNOPSIS |
#include <math.h> |
double fma(double <[x]>, double <[y]>, double <[z]>); |
float fmaf(float <[x]>, float <[y]>, float <[z]>); |
|
DESCRIPTION |
The <<fma>> functions compute (<[x]> * <[y]>) + <[z]>, rounded as one ternary |
operation: they compute the value (as if) to infinite precision and round once |
to the result format, according to the rounding mode characterized by the value |
of FLT_ROUNDS. That is, they are supposed to do this: see below. |
|
RETURNS |
The <<fma>> functions return (<[x]> * <[y]>) + <[z]>, rounded as one ternary |
operation. |
|
BUGS |
This implementation does not provide the function that it should, purely |
returning "(<[x]> * <[y]>) + <[z]>;" with no attempt at all to provide the |
simulated infinite precision intermediates which are required. DO NOT USE THEM. |
|
If double has enough more precision than float, then <<fmaf>> should provide |
the expected numeric results, as it does use double for the calculation. But |
since this is not the case for all platforms, this manual cannot determine |
if it is so for your case. |
|
PORTABILITY |
ANSI C, POSIX. |
|
*/ |
|
#include "fdlibm.h" |
|
#ifndef _DOUBLE_IS_32BITS |
|
#ifdef __STDC__ |
double fma(double x, double y, double z) |
#else |
double fma(x,y) |
double x; |
double y; |
double z; |
#endif |
{ |
/* Implementation defined. */ |
return (x * y) + z; |
} |
|
#endif /* _DOUBLE_IS_32BITS */ |