Make quality improvements

- Write some more unit tests
- memcpy() on ARM is now faster
- Address the Musl complex math FIXME comments
- Some libm funcs like pow() now support setting errno
- Import the latest and greatest math functions from ARM
- Use more accurate atan2f() and log1pf() implementations
- atoi() and atol() will no longer saturate or clobber errno
This commit is contained in:
Justine Tunney 2024-02-25 14:57:28 -08:00
parent af8f2bd19f
commit 592f6ebc20
No known key found for this signature in database
GPG key ID: BE714B4575D6E328
122 changed files with 6305 additions and 3859 deletions

View file

@ -9,15 +9,47 @@
#define M_LOG10E 0.43429448190325182765 /* log₁₀𝑒 */
#define M_LN2 0.69314718055994530942 /* logₑ2 */
#define M_LN10 2.30258509299404568402 /* logₑ10 */
#define M_PI 3.14159265358979323846 /* pi */
#define M_PI_2 1.57079632679489661923 /* pi/2 */
#define M_PI_4 0.78539816339744830962 /* pi/4 */
#define M_1_PI 0.31830988618379067154 /* 1/pi */
#define M_2_PI 0.63661977236758134308 /* 2/pi */
#define M_2_SQRTPI 1.12837916709551257390 /* 2/sqrt(pi) */
#define M_PI 3.14159265358979323846 /* 𝜋 */
#define M_PI_2 1.57079632679489661923 /* 𝜋/2 */
#define M_PI_4 0.78539816339744830962 /* 𝜋/4 */
#define M_1_PI 0.31830988618379067154 /* 1/𝜋 */
#define M_2_PI 0.63661977236758134308 /* 2/𝜋 */
#define M_2_SQRTPI 1.12837916709551257390 /* 2/sqrt(𝜋) */
#define M_SQRT2 1.41421356237309504880 /* sqrt(2) */
#define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */
#if defined(_GNU_SOURCE) || defined(_COSMO_SOURCE)
#define M_Ef 2.7182818284590452354f /* 𝑒 */
#define M_LOG2Ef 1.4426950408889634074f /* log₂𝑒 */
#define M_LOG10Ef 0.43429448190325182765f /* log₁₀𝑒 */
#define M_LN2f 0.69314718055994530942f /* logₑ2 */
#define M_LN10f 2.30258509299404568402f /* logₑ10 */
#define M_PIf 3.14159265358979323846f /* 𝜋 */
#define M_PI_2f 1.57079632679489661923f /* 𝜋/2 */
#define M_PI_4f 0.78539816339744830962f /* 𝜋/4 */
#define M_1_PIf 0.31830988618379067154f /* 1/𝜋 */
#define M_2_PIf 0.63661977236758134308f /* 2/𝜋 */
#define M_2_SQRTPIf 1.12837916709551257390f /* 2/sqrt(𝜋) */
#define M_SQRT2f 1.41421356237309504880f /* sqrt(2) */
#define M_SQRT1_2f 0.70710678118654752440f /* 1/sqrt(2) */
#endif
#if defined(_GNU_SOURCE) || defined(_COSMO_SOURCE)
#define M_El 2.718281828459045235360287471352662498L /* 𝑒 */
#define M_LOG2El 1.442695040888963407359924681001892137L /* log₂𝑒 */
#define M_LOG10El 0.434294481903251827651128918916605082L /* log₁₀𝑒 */
#define M_LN2l 0.693147180559945309417232121458176568L /* logₑ2 */
#define M_LN10l 2.302585092994045684017991454684364208L /* logₑ10 */
#define M_PIl 3.141592653589793238462643383279502884L /* 𝜋 */
#define M_PI_2l 1.570796326794896619231321691639751442L /* 𝜋/2 */
#define M_PI_4l 0.785398163397448309615660845819875721L /* 𝜋/4 */
#define M_1_PIl 0.318309886183790671537767526745028724L /* 1/𝜋 */
#define M_2_PIl 0.636619772367581343075535053490057448L /* 2/𝜋 */
#define M_2_SQRTPIl 1.128379167095512573896158903121545172L /* 2/sqrt(𝜋) */
#define M_SQRT2l 1.414213562373095048801688724209698079L /* sqrt(2) */
#define M_SQRT1_2l 0.707106781186547524400844362104849039L /* 1/sqrt(2) */
#endif
#define DBL_DECIMAL_DIG __DBL_DECIMAL_DIG__
#define DBL_DIG __DBL_DIG__
#define DBL_EPSILON __DBL_EPSILON__
@ -76,6 +108,27 @@
#define FP_ILOGB0 (-2147483647 - 1)
#define FP_ILOGBNAN (-2147483647 - 1)
#define MATH_ERRNO 1
#define MATH_ERREXCEPT 2
#ifdef __FAST_MATH__
#define math_errhandling 0
#elif defined(__NO_MATH_ERRNO__)
#define math_errhandling (MATH_ERREXCEPT)
#else
#define math_errhandling (MATH_ERRNO | MATH_ERREXCEPT)
#endif
#ifdef __FP_FAST_FMA
#define FP_FAST_FMA 1
#endif
#ifdef __FP_FAST_FMAF
#define FP_FAST_FMAF 1
#endif
#ifdef __FP_FAST_FMAL
#define FP_FAST_FMAL 1
#endif
COSMOPOLITAN_C_START_
#define NAN __builtin_nanf("")