2016-12-24 01:03:10 +00:00
|
|
|
/*
|
|
|
|
|
|
|
|
https://www.musl-libc.org/
|
|
|
|
http://git.musl-libc.org/cgit/musl/tree/src/math/exp10.c
|
|
|
|
|
|
|
|
musl as a whole is licensed under the following standard MIT license:
|
|
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
Copyright © 2005-2014 Rich Felker, et al.
|
|
|
|
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining
|
|
|
|
a copy of this software and associated documentation files (the
|
|
|
|
"Software"), to deal in the Software without restriction, including
|
|
|
|
without limitation the rights to use, copy, modify, merge, publish,
|
|
|
|
distribute, sublicense, and/or sell copies of the Software, and to
|
|
|
|
permit persons to whom the Software is furnished to do so, subject to
|
|
|
|
the following conditions:
|
|
|
|
|
|
|
|
The above copyright notice and this permission notice shall be
|
|
|
|
included in all copies or substantial portions of the Software.
|
|
|
|
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
|
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
|
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
|
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
|
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
|
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
|
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
|
|
|
|
Authors/contributors include:
|
|
|
|
|
|
|
|
Alex Dowad
|
|
|
|
Alexander Monakov
|
|
|
|
Anthony G. Basile
|
|
|
|
Arvid Picciani
|
|
|
|
Bobby Bingham
|
|
|
|
Boris Brezillon
|
|
|
|
Brent Cook
|
|
|
|
Chris Spiegel
|
|
|
|
Clément Vasseur
|
|
|
|
Daniel Micay
|
|
|
|
Denys Vlasenko
|
|
|
|
Emil Renner Berthing
|
|
|
|
Felix Fietkau
|
|
|
|
Felix Janda
|
|
|
|
Gianluca Anzolin
|
|
|
|
Hauke Mehrtens
|
|
|
|
Hiltjo Posthuma
|
|
|
|
Isaac Dunham
|
|
|
|
Jaydeep Patil
|
|
|
|
Jens Gustedt
|
|
|
|
Jeremy Huntwork
|
|
|
|
Jo-Philipp Wich
|
|
|
|
Joakim Sindholt
|
|
|
|
John Spencer
|
|
|
|
Josiah Worcester
|
|
|
|
Justin Cormack
|
|
|
|
Khem Raj
|
|
|
|
Kylie McClain
|
|
|
|
Luca Barbato
|
|
|
|
Luka Perkov
|
|
|
|
M Farkas-Dyck (Strake)
|
|
|
|
Mahesh Bodapati
|
|
|
|
Michael Forney
|
|
|
|
Natanael Copa
|
|
|
|
Nicholas J. Kain
|
|
|
|
orc
|
|
|
|
Pascal Cuoq
|
|
|
|
Petr Hosek
|
|
|
|
Pierre Carrier
|
|
|
|
Rich Felker
|
|
|
|
Richard Pennington
|
|
|
|
Shiz
|
|
|
|
sin
|
|
|
|
Solar Designer
|
|
|
|
Stefan Kristiansson
|
|
|
|
Szabolcs Nagy
|
|
|
|
Timo Teräs
|
|
|
|
Trutz Behn
|
|
|
|
Valentin Ochs
|
|
|
|
William Haddon
|
|
|
|
|
|
|
|
Portions of this software are derived from third-party works licensed
|
|
|
|
under terms compatible with the above MIT license:
|
|
|
|
|
|
|
|
The TRE regular expression implementation (src/regex/reg* and
|
|
|
|
src/regex/tre*) is Copyright © 2001-2008 Ville Laurikari and licensed
|
|
|
|
under a 2-clause BSD license (license text in the source files). The
|
|
|
|
included version has been heavily modified by Rich Felker in 2012, in
|
|
|
|
the interests of size, simplicity, and namespace cleanliness.
|
|
|
|
|
|
|
|
Much of the math library code (src/math/ * and src/complex/ *) is
|
|
|
|
Copyright © 1993,2004 Sun Microsystems or
|
|
|
|
Copyright © 2003-2011 David Schultz or
|
|
|
|
Copyright © 2003-2009 Steven G. Kargl or
|
|
|
|
Copyright © 2003-2009 Bruce D. Evans or
|
|
|
|
Copyright © 2008 Stephen L. Moshier
|
|
|
|
and labelled as such in comments in the individual source files. All
|
|
|
|
have been licensed under extremely permissive terms.
|
|
|
|
|
|
|
|
The ARM memcpy code (src/string/arm/memcpy_el.S) is Copyright © 2008
|
|
|
|
The Android Open Source Project and is licensed under a two-clause BSD
|
|
|
|
license. It was taken from Bionic libc, used on Android.
|
|
|
|
|
|
|
|
The implementation of DES for crypt (src/crypt/crypt_des.c) is
|
|
|
|
Copyright © 1994 David Burren. It is licensed under a BSD license.
|
|
|
|
|
|
|
|
The implementation of blowfish crypt (src/crypt/crypt_blowfish.c) was
|
|
|
|
originally written by Solar Designer and placed into the public
|
|
|
|
domain. The code also comes with a fallback permissive license for use
|
|
|
|
in jurisdictions that may not recognize the public domain.
|
|
|
|
|
|
|
|
The smoothsort implementation (src/stdlib/qsort.c) is Copyright © 2011
|
|
|
|
Valentin Ochs and is licensed under an MIT-style license.
|
|
|
|
|
|
|
|
The BSD PRNG implementation (src/prng/random.c) and XSI search API
|
|
|
|
(src/search/ *.c) functions are Copyright © 2011 Szabolcs Nagy and
|
|
|
|
licensed under following terms: "Permission to use, copy, modify,
|
|
|
|
and/or distribute this code for any purpose with or without fee is
|
|
|
|
hereby granted. There is no warranty."
|
|
|
|
|
|
|
|
The x86_64 port was written by Nicholas J. Kain and is licensed under
|
|
|
|
the standard MIT terms.
|
|
|
|
|
|
|
|
The mips and microblaze ports were originally written by Richard
|
|
|
|
Pennington for use in the ellcc project. The original code was adapted
|
|
|
|
by Rich Felker for build system and code conventions during upstream
|
|
|
|
integration. It is licensed under the standard MIT terms.
|
|
|
|
|
|
|
|
The mips64 port was contributed by Imagination Technologies and is
|
|
|
|
licensed under the standard MIT terms.
|
|
|
|
|
|
|
|
The powerpc port was also originally written by Richard Pennington,
|
|
|
|
and later supplemented and integrated by John Spencer. It is licensed
|
|
|
|
under the standard MIT terms.
|
|
|
|
|
|
|
|
All other files which have no copyright comments are original works
|
|
|
|
produced specifically for use as part of this library, written either
|
|
|
|
by Rich Felker, the main author of the library, or by one or more
|
|
|
|
contibutors listed above. Details on authorship of individual files
|
|
|
|
can be found in the git version control history of the project. The
|
|
|
|
omission of copyright and license comments in each file is in the
|
|
|
|
interest of source tree size.
|
|
|
|
|
|
|
|
In addition, permission is hereby granted for all public header files
|
|
|
|
(include/ * and arch/ * /bits/ *) and crt files intended to be linked into
|
|
|
|
applications (crt/ *, ldso/dlstart.c, and arch/ * /crt_arch.h) to omit
|
|
|
|
the copyright notice and permission notice otherwise required by the
|
|
|
|
license, and to use these files without any requirement of
|
|
|
|
attribution. These files include substantial contributions from:
|
|
|
|
|
|
|
|
Bobby Bingham
|
|
|
|
John Spencer
|
|
|
|
Nicholas J. Kain
|
|
|
|
Rich Felker
|
|
|
|
Richard Pennington
|
|
|
|
Stefan Kristiansson
|
|
|
|
Szabolcs Nagy
|
|
|
|
|
|
|
|
all of whom have explicitly granted such permission.
|
|
|
|
|
|
|
|
This file previously contained text expressing a belief that most of
|
|
|
|
the files covered by the above exception were sufficiently trivial not
|
|
|
|
to be subject to copyright, resulting in confusion over whether it
|
|
|
|
negated the permissions granted in the license. In the spirit of
|
|
|
|
permissive licensing, and of not having licensing issues being an
|
|
|
|
obstacle to adoption, that text has been removed.
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
//#define _GNU_SOURCE
|
|
|
|
#include <math.h>
|
|
|
|
#include <stdint.h>
|
|
|
|
//#include "libc.h"
|
|
|
|
|
|
|
|
double musl_exp10(double x)
|
|
|
|
{
|
2017-04-01 07:20:54 +00:00
|
|
|
static const double p10[] = {
|
|
|
|
1e-15, 1e-14, 1e-13, 1e-12, 1e-11, 1e-10,
|
|
|
|
1e-9, 1e-8, 1e-7, 1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1,
|
|
|
|
1, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9,
|
|
|
|
1e10, 1e11, 1e12, 1e13, 1e14, 1e15
|
|
|
|
};
|
|
|
|
double n, y = modf(x, &n);
|
|
|
|
union {double f; uint64_t i;} u = {n};
|
|
|
|
/* fabs(n) < 16 without raising invalid on nan */
|
|
|
|
if ((u.i>>52 & 0x7ff) < 0x3ff+4) {
|
|
|
|
if (!y) return p10[(int)n+15];
|
|
|
|
y = exp2(3.32192809488736234787031942948939 * y);
|
|
|
|
return y * p10[(int)n+15];
|
|
|
|
}
|
|
|
|
return pow(10.0, x);
|
2016-12-24 01:03:10 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
//weak_alias(exp10, pow10);
|
|
|
|
|