URL
https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk
Subversion Repositories openrisc_me
[/] [openrisc/] [trunk/] [gnu-src/] [newlib-1.18.0/] [newlib/] [libm/] [common/] [s_fma.c] - Rev 262
Go to most recent revision | Compare with Previous | Blame | View Log
/* 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 */
Go to most recent revision | Compare with Previous | Blame | View Log