musl/src/math/pow.c, branch master musl - an implementation of the standard library for Linux-based systems math: new pow 2019年04月18日T03:45:40+00:00 Szabolcs Nagy nsz@port70.net 2018年12月01日T01:09:01+00:00 e4dd65305a046019123ab34ebdcbe761a3a719ca from https://github.com/ARM-software/optimized-routines, commit 04884bd04eac4b251da4026900010ea7d8850edc The underflow exception is signaled if the result is in the subnormal range even if the result is exact. code size change: +3421 bytes. benchmark on x86_64 before, after, speedup: -Os: pow rthruput: 102.96 ns/call 33.38 ns/call 3.08x pow latency: 144.37 ns/call 54.75 ns/call 2.64x -O3: pow rthruput: 98.91 ns/call 32.79 ns/call 3.02x pow latency: 138.74 ns/call 53.78 ns/call 2.58x
from https://github.com/ARM-software/optimized-routines,
commit 04884bd04eac4b251da4026900010ea7d8850edc
The underflow exception is signaled if the result is in the subnormal
range even if the result is exact.
code size change: +3421 bytes.
benchmark on x86_64 before, after, speedup:
-Os:
 pow rthruput: 102.96 ns/call 33.38 ns/call 3.08x
 pow latency: 144.37 ns/call 54.75 ns/call 2.64x
-O3:
 pow rthruput: 98.91 ns/call 32.79 ns/call 3.02x
 pow latency: 138.74 ns/call 53.78 ns/call 2.58x
math: fix pow signed shift ub 2016年10月20日T05:32:27+00:00 Szabolcs Nagy nsz@port70.net 2016年10月04日T01:58:56+00:00 688d3da0f1730daddbc954bbc2d27cc96ceee04c j is int32_t and thus j<<31 is undefined if j==1, so j is changed to uint32_t locally as a quick fix, the generated code is not affected. (this is a strict conformance fix, future c standard may allow 1<<31, see DR 463. the bug was inherited from freebsd fdlibm, the proper fix is to use uint32_t for all bit hacks, but that requires more intrusive changes.) reported by Daniel Sabogal
j is int32_t and thus j<<31 is undefined if j==1, so j is changed to
uint32_t locally as a quick fix, the generated code is not affected.
(this is a strict conformance fix, future c standard may allow 1<<31,
see DR 463. the bug was inherited from freebsd fdlibm, the proper fix
is to use uint32_t for all bit hacks, but that requires more intrusive
changes.)
reported by Daniel Sabogal
math: fix pow(+-0,-inf) not to raise divbyzero flag 2015年04月18日T04:18:52+00:00 Szabolcs Nagy nsz@port70.net 2015年04月11日T00:35:07+00:00 cb5c057c87240a9534f8e0d9b7ff2560082f6218 this reverts the commit f29fea00b5bc72d4b8abccba2bb1e312684d1fce which was based on a bug in C99 and POSIX and did not match IEEE-754 http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1515.pdf
this reverts the commit f29fea00b5bc72d4b8abccba2bb1e312684d1fce
which was based on a bug in C99 and POSIX and did not match IEEE-754
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1515.pdf
math: fix pow(x,-1) to raise underflow properly 2013年08月15日T15:13:24+00:00 Szabolcs Nagy nsz@port70.net 2013年08月15日T15:13:24+00:00 c221af951693d526d3ae946f7e708af8e7a9bf85 if FLT_EVAL_METHOD!=0 check if (double)(1/x) is subnormal and not a power of 2 (if 1/x is power of 2 then either it is exact or the long double to double rounding already raised inexact and underflow)
if FLT_EVAL_METHOD!=0 check if (double)(1/x) is subnormal and not a
power of 2 (if 1/x is power of 2 then either it is exact or the
long double to double rounding already raised inexact and underflow)
math: fix pow(0,-inf) to raise divbyzero flag 2013年08月15日T10:08:45+00:00 Szabolcs Nagy nsz@port70.net 2013年08月15日T10:08:45+00:00 f29fea00b5bc72d4b8abccba2bb1e312684d1fce
clean up pow.c and powf.c 2012年03月20日T19:04:53+00:00 nsz nsz@port70.net 2012年03月20日T19:04:53+00:00 f1347a3a453ce38bf55cd92f5922311235810fd1 fix comments about special cases
fix comments about special cases
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).
math cleanup: use 1.0f instead of 1.0F 2012年03月13日T20:11:46+00:00 nsz nsz@port70.net 2012年03月13日T20:11:46+00:00 32ca5ef3ff3069bdaae5f95be1900a3c3f831247
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 によって変換されたページ (->オリジナル) /