Mercurial > nand-ecoscentric
diff packages/language/c/libm/current/src/float/portable-api/sf_ldexp.c @ 3337:77f9d3253c3e
Add: Complex number header and library (single and double precision floating point),
port from Newlib.
Add: Single precision floating point library, port from Newlib.
[ Bugzilla 1001539 ]
| author | vae |
|---|---|
| date | Sun, 25 Aug 2013 14:38:57 +0000 |
| parents | |
| children |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/packages/language/c/libm/current/src/float/portable-api/sf_ldexp.c @@ -0,0 +1,109 @@ +//=========================================================================== +// +// sf_ldexp.c +// +// Part of the standard mathematical function library +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): +// Contributors: visar, ilijak +// Date: 2012-03-08 +// Purpose: +// Description: +// Usage: +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +// CONFIGURATION + +#include <pkgconf/libm.h> // Configuration header + +// Include the Math library? +#ifdef CYGPKG_LIBM + +// Derived from code with the following copyright + + +/* sf_ldexp.c -- float version of s_ldexp.c. + * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + + +#include "mathincl/fdlibm.h" +#include <errno.h> + +#ifdef __STDC__ + float ldexpf(float value, int exp) +#else + float ldexpf(value, exp) + float value; int exp; +#endif +{ + float z; + + z = scalbnf(value,exp); + +#ifndef CYGSEM_LIBM_COMPAT_IEEE_ONLY + if(cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE) return z; + if(!(finitef(z)||isnanf(z))&&finitef(value)) { + return __kernel_standard(value,(float)exp,43); /* ldexp overflow */ + } + if(z==0.0&&z!=value) { + return __kernel_standard(value,(float)exp,44); /* ldexp underflow */ + } +#endif + + return z; +} + + +#endif // ifdef CYGPKG_LIBM + +// EOF sf_ldexp.c
