musl/include/tgmath.h, branch master musl - an implementation of the standard library for Linux-based systems math: more correct tgmath.h type cast logic 2012年12月19日T09:57:54+00:00 Szabolcs Nagy nsz@port70.net 2012年12月19日T09:57:54+00:00 3c4214db727ed6300b34be28a5428b7abd6598df __IS_FP is a portable integer constant expression now (uses that unsigned long long is larger than float) the result casting logic should work now on all compilers supporting typeof
__IS_FP is a portable integer constant expression now
(uses that unsigned long long is larger than float)
the result casting logic should work now on all compilers
supporting typeof
math: new type cast logic in tgmath.h 2012年12月19日T03:05:30+00:00 Szabolcs Nagy nsz@port70.net 2012年12月19日T03:05:30+00:00 e9e2b66e687bc0b4d07305a2b288ed8ff4ae5b4b * return type logic is simplified a bit and fixed (see below) * return type of conj and cproj were wrong on int arguments * added comments about the pending issues (usually we don't have comments in public headers but this is not the biggest issue with tgmath.h) casting the result to the right type cannot be done in c99 (c11 _Generic can solve this but that is not widely supported), so the typeof extension of gcc is used and that the ?: operator has special semantics when one of the operands is a null pointer constant the standard is very strict about the definition of null pointer constants so typeof with ?: is still not enough so compiler specific workaround is used for now on gcc '!1.0' is a null pointer constant so we can use the old __IS_FP logic (eventhough it's non-standard) on clang (and on gcc as well) 'sizeof(void)-1' is a null pointer constant so we can use !(sizeof(*(0?(int*)0:(void*)__IS_FP(x)))-1) (this is non-standard as well), the old logic is used by default and this new one on clang
* return type logic is simplified a bit and fixed (see below)
* return type of conj and cproj were wrong on int arguments
* added comments about the pending issues
(usually we don't have comments in public headers but this is
not the biggest issue with tgmath.h)
casting the result to the right type cannot be done in c99
(c11 _Generic can solve this but that is not widely supported),
so the typeof extension of gcc is used and that the ?: operator
has special semantics when one of the operands is a null
pointer constant
the standard is very strict about the definition of null
pointer constants so typeof with ?: is still not enough so
compiler specific workaround is used for now
on gcc '!1.0' is a null pointer constant so we can use the old
__IS_FP logic (eventhough it's non-standard)
on clang (and on gcc as well) 'sizeof(void)-1' is a null
pointer constant so we can use
 !(sizeof(*(0?(int*)0:(void*)__IS_FP(x)))-1)
(this is non-standard as well), the old logic is used by
default and this new one on clang
fixed tgmath.h for functions with integral result 2012年12月14日T11:49:35+00:00 Szabolcs Nagy nsz@port70.net 2012年12月14日T11:49:35+00:00 934609442339edb21a33532ccefac8b78e6305f2 in tgmath.h the return values are casted to the appropriate floating-point type (if the compiler supports gcc __typeof__), this is wrong in case of ilogb, lrint, llrint, lround, llround which do not need such cast
in tgmath.h the return values are casted to the appropriate
floating-point type (if the compiler supports gcc __typeof__),
this is wrong in case of ilogb, lrint, llrint, lround, llround
which do not need such cast
math: fix nextafter definition in tgmath.h 2012年05月28日T20:55:03+00:00 nsz nsz@port70.net 2012年05月28日T20:55:03+00:00 b1cf11c090900cc476c2a26d739e16aaffbdf6f5
tgmath.h: suppress any existing macro definitions before defining macros 2012年03月22日T19:36:56+00:00 Rich Felker dalias@aerifal.cx 2012年03月22日T19:36:56+00:00 132f0a00831d3b64cc6ae35df69d6865516c64b5 this is necessary so that we can freely add macro versions of some of the math/complex functions without worrying about breaking tgmath.
this is necessary so that we can freely add macro versions of some of
the math/complex functions without worrying about breaking tgmath.
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 によって変換されたページ (->オリジナル) /