musl/src/math/expf.c, branch master musl - an implementation of the standard library for Linux-based systems math: new exp2f and expf 2019年04月18日T03:43:53+00:00 Szabolcs Nagy nsz@port70.net 2017年10月22日T18:06:00+00:00 3f94c648ef32c95fa7f5c94b5cb8f2b764fc1938 from https://github.com/ARM-software/optimized-routines, commit 04884bd04eac4b251da4026900010ea7d8850edc In expf TOINT_INTRINSICS is kept, but is unused, it would require support for __builtin_round and __builtin_lround as single instruction. code size change: +94 bytes. benchmark on x86_64 before, after, speedup: -Os: expf rthruput: 9.19 ns/call 8.11 ns/call 1.13x expf latency: 34.19 ns/call 18.77 ns/call 1.82x exp2f rthruput: 5.59 ns/call 6.52 ns/call 0.86x exp2f latency: 17.93 ns/call 16.70 ns/call 1.07x -O3: expf rthruput: 9.12 ns/call 4.92 ns/call 1.85x expf latency: 34.44 ns/call 18.99 ns/call 1.81x exp2f rthruput: 5.58 ns/call 4.49 ns/call 1.24x exp2f latency: 17.95 ns/call 16.94 ns/call 1.06x
from https://github.com/ARM-software/optimized-routines,
commit 04884bd04eac4b251da4026900010ea7d8850edc
In expf TOINT_INTRINSICS is kept, but is unused, it would require support
for __builtin_round and __builtin_lround as single instruction.
code size change: +94 bytes.
benchmark on x86_64 before, after, speedup:
-Os:
 expf rthruput: 9.19 ns/call 8.11 ns/call 1.13x
 expf latency: 34.19 ns/call 18.77 ns/call 1.82x
 exp2f rthruput: 5.59 ns/call 6.52 ns/call 0.86x
 exp2f latency: 17.93 ns/call 16.70 ns/call 1.07x
-O3:
 expf rthruput: 9.12 ns/call 4.92 ns/call 1.85x
 expf latency: 34.44 ns/call 18.99 ns/call 1.81x
 exp2f rthruput: 5.58 ns/call 4.49 ns/call 1.24x
 exp2f latency: 17.95 ns/call 16.94 ns/call 1.06x
math: fix expf(-NAN) and exp2f(-NAN) to return -NAN instead of 0 2016年03月04日T22:58:49+00:00 Szabolcs Nagy nsz@port70.net 2016年03月04日T21:23:33+00:00 b023c03b574acdfd73418314a5dcaa83e5cea5a0 expf(-NAN) was treated as expf(-large) which unconditionally returns +0, so special case +-NAN. reported by Petr Hosek.
expf(-NAN) was treated as expf(-large) which unconditionally
returns +0, so special case +-NAN.
reported by Petr Hosek.
math: remove STRICT_ASSIGN macro 2013年09月06日T18:35:55+00:00 Szabolcs Nagy nsz@port70.net 2013年09月06日T18:35:55+00:00 9b0fcb441a44456c7b071c7cdaf90403f81ec05a gcc did not always drop excess precision according to c99 at assignments before version 4.5 even if -std=c99 was requested which caused badly broken mathematical functions on i386 when FLT_EVAL_METHOD!=0 but STRICT_ASSIGN was not used consistently and it is worked around for old compilers with -ffloat-store so it is no longer needed the new convention is to get the compiler respect c99 semantics and when excess precision is not harmful use float_t or double_t or to specialize code using FLT_EVAL_METHOD
gcc did not always drop excess precision according to c99 at assignments
before version 4.5 even if -std=c99 was requested which caused badly
broken mathematical functions on i386 when FLT_EVAL_METHOD!=0
but STRICT_ASSIGN was not used consistently and it is worked around for
old compilers with -ffloat-store so it is no longer needed
the new convention is to get the compiler respect c99 semantics and when
excess precision is not harmful use float_t or double_t or to specialize
code using FLT_EVAL_METHOD
math: fix underflow in exp*.c and long double handling in exp2l 2013年09月05日T11:30:08+00:00 Szabolcs Nagy nsz@port70.net 2013年09月04日T07:51:11+00:00 39c910fb061114e6aa5c3bf2c94b1d7262d62221 * don't care about inexact flag * use double_t and float_t (faster, smaller, more precise on x86) * exp: underflow when result is zero or subnormal and not -inf * exp2: underflow when result is zero or subnormal and not exact * expm1: underflow when result is zero or subnormal * expl: don't underflow on -inf * exp2: fix incorrect comment * expm1: simplify special case handling and overflow properly * expm1: cleanup final scaling and fix negative left shift ub (twopk)
* don't care about inexact flag
* use double_t and float_t (faster, smaller, more precise on x86)
* exp: underflow when result is zero or subnormal and not -inf
* exp2: underflow when result is zero or subnormal and not exact
* expm1: underflow when result is zero or subnormal
* expl: don't underflow on -inf
* exp2: fix incorrect comment
* expm1: simplify special case handling and overflow properly
* expm1: cleanup final scaling and fix negative left shift ub (twopk)
math: expf.c cleanup 2012年11月18日T02:42:09+00:00 Szabolcs Nagy nsz@port70.net 2012年11月18日T02:42:09+00:00 ab1772c597ba8fe0c26400256b12d7a4df23880e similar to exp.c cleanup: use scalbnf, don't return excess precision, drop some optimizatoins. exp.c was changed to be more consistent with expf.c code.
similar to exp.c cleanup: use scalbnf, don't return excess precision,
drop some optimizatoins.
exp.c was changed to be more consistent with expf.c code.
code cleanup of named constants 2012年03月19日T22:41:19+00:00 nsz nsz@port70.net 2012年03月19日T22:41:19+00:00 0cbb65479147ecdaa664e88cc2a5a925f3de502f zero, one, two, half are replaced by const literals The policy was to use the f suffix for float consts (1.0f), but don't use suffix for long double consts (these consts can be exactly represented as double).
zero, one, two, half are replaced by const literals
The policy was to use the f suffix for float consts (1.0f),
but don't use suffix for long double consts (these consts
can be exactly represented as double).
fix loads of missing const in new libm, and some global vars (?!) in powl 2012年03月18日T05:58:28+00:00 Rich Felker dalias@aerifal.cx 2012年03月18日T05:58:28+00:00 9e2a895aaaa4a3985e94ae4f3e24c1af65f9bb34
math cleanup: use 1.0f instead of (float)1.0 2012年03月13日T19:24:23+00:00 nsz nsz@port70.net 2012年03月13日T19:24:23+00:00 8d0a6f7a1c47b280647f292e6864b85b72c71f2e
first commit of the new libm! 2012年03月13日T05:17:53+00:00 Rich Felker dalias@aerifal.cx 2012年03月13日T05:17:53+00:00 b69f695acedd4ce2798ef9ea28d834ceccc789bd thanks to the hard work of Szabolcs Nagy (nsz), identifying the best (from correctness and license standpoint) implementations from freebsd and openbsd and cleaning them up! musl should now fully support c99 float and long double math functions, and has near-complete complex math support. tgmath should also work (fully on gcc-compatible compilers, and mostly on any c99 compiler). based largely on commit 0376d44a890fea261506f1fc63833e7a686dca19 from nsz's libm git repo, with some additions (dummy versions of a few missing long double complex functions, etc.) by me. various cleanups still need to be made, including re-adding (if they're correct) some asm functions that were dropped.
thanks to the hard work of Szabolcs Nagy (nsz), identifying the best
(from correctness and license standpoint) implementations from freebsd
and openbsd and cleaning them up! musl should now fully support c99
float and long double math functions, and has near-complete complex
math support. tgmath should also work (fully on gcc-compatible
compilers, and mostly on any c99 compiler).
based largely on commit 0376d44a890fea261506f1fc63833e7a686dca19 from
nsz's libm git repo, with some additions (dummy versions of a few
missing long double complex functions, etc.) by me.
various cleanups still need to be made, including re-adding (if
they're correct) some asm functions that were dropped.

AltStyle によって変換されたページ (->オリジナル) /