47 lines
1.2 KiB
C
47 lines
1.2 KiB
C
/* Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved.
|
|
*
|
|
* Permission to use, copy, modify, and distribute this software
|
|
* is freely granted, provided that this notice is preserved.
|
|
*/
|
|
|
|
#include "fdlibm.h"
|
|
|
|
#if !HAVE_FAST_FMAF
|
|
|
|
#ifdef __STDC__
|
|
float fmaf(float x, float y, float z)
|
|
#else
|
|
float fmaf(x,y,z)
|
|
float x;
|
|
float y;
|
|
float z;
|
|
#endif
|
|
{
|
|
/* NOTE: The floating-point exception behavior of this is not as
|
|
* required. But since the basic function is not really done properly,
|
|
* it is not worth bothering to get the exceptions right, either. */
|
|
/* Let the implementation handle this. */ /* <= NONSENSE! */
|
|
/* In floating-point implementations in which double is larger than float,
|
|
* computing as double should provide the desired function. Otherwise,
|
|
* the behavior will not be as specified in the standards. */
|
|
return (float) (((double) x * (double) y) + (double) z);
|
|
}
|
|
|
|
#endif
|
|
|
|
#ifdef _DOUBLE_IS_32BITS
|
|
|
|
#ifdef __STDC__
|
|
double fma(double x, double y, double z)
|
|
#else
|
|
double fma(x,y,z)
|
|
double x;
|
|
double y;
|
|
double z;
|
|
#endif
|
|
{
|
|
return (double) fmaf((float) x, (float) y, (float) z);
|
|
}
|
|
|
|
#endif /* defined(_DOUBLE_IS_32BITS) */
|