Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libm/common/s_fma.c')
-rw-r--r--newlib/libm/common/s_fma.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/newlib/libm/common/s_fma.c b/newlib/libm/common/s_fma.c
index 86958afcb..964a8284a 100644
--- a/newlib/libm/common/s_fma.c
+++ b/newlib/libm/common/s_fma.c
@@ -1,3 +1,41 @@
+/*
+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