From cb8d1575b633187c2df0bc6cae262d9d5f959b05 Mon Sep 17 00:00:00 2001 From: Adhemerval Zanella Date: Fri, 10 Oct 2025 15:15:25 -0300 Subject: [PATCH] math: Consolidate acosh and asinh internal table The shared internal data definitions are consolidated in s_asincosh_data.c. Reviewed-by: DJ Delorie --- math/Makefile | 1 + sysdeps/ieee754/dbl-64/e_acosh.c | 100 +----------------- sysdeps/ieee754/dbl-64/s_asincosh_data.c | 124 +++++++++++++++++++++++ sysdeps/ieee754/dbl-64/s_asincosh_data.h | 50 +++++++++ sysdeps/ieee754/dbl-64/s_asinh.c | 100 +----------------- 5 files changed, 177 insertions(+), 198 deletions(-) create mode 100644 sysdeps/ieee754/dbl-64/s_asincosh_data.c create mode 100644 sysdeps/ieee754/dbl-64/s_asincosh_data.h diff --git a/math/Makefile b/math/Makefile index 3d236873f8..d1b1ea3866 100644 --- a/math/Makefile +++ b/math/Makefile @@ -361,6 +361,7 @@ type-double-routines := \ e_pow_log_data \ k_rem_pio2 \ math_err \ + s_asincosh_data \ sincostab \ # type-double-routines diff --git a/sysdeps/ieee754/dbl-64/e_acosh.c b/sysdeps/ieee754/dbl-64/e_acosh.c index 757a7ac4cd..faeef67e7e 100644 --- a/sysdeps/ieee754/dbl-64/e_acosh.c +++ b/sysdeps/ieee754/dbl-64/e_acosh.c @@ -40,6 +40,7 @@ SOFTWARE. */ #include #include #include "math_config.h" +#include "s_asincosh_data.h" static inline double fasttwosum (double x, double y, double *e) @@ -134,105 +135,6 @@ as_acosh_one (double x, double sh, double sl) return y0 + y1; } -static const struct -{ - uint64_t c0; - short c1; -} B[] = { - { 301, 27565 }, { 7189, 24786 }, { 13383, 22167 }, { 18923, 19696 }, - { 23845, 17361 }, { 28184, 15150 }, { 31969, 13054 }, { 35231, 11064 }, - { 37996, 9173 }, { 40288, 7372 }, { 42129, 5657 }, { 43542, 4020 }, - { 44546, 2457 }, { 45160, 962 }, { 45399, -468 }, { 45281, -1838 }, - { 44821, -3151 }, { 44032, -4412 }, { 42929, -5622 }, { 41522, -6786 }, - { 39825, -7905 }, { 37848, -8982 }, { 35602, -10020 }, { 33097, -11020 }, - { 30341, -11985 }, { 27345, -12916 }, { 24115, -13816 }, { 20661, -14685 }, - { 16989, -15526 }, { 13107, -16339 }, { 9022, -17126 }, { 4740, -17889 } -}; -static const double r1[] - = { 0x1p+0, 0x1.f5076p-1, 0x1.ea4bp-1, 0x1.dfc98p-1, 0x1.d5818p-1, - 0x1.cb72p-1, 0x1.c199cp-1, 0x1.b7f76p-1, 0x1.ae8ap-1, 0x1.a5504p-1, - 0x1.9c492p-1, 0x1.93738p-1, 0x1.8ace6p-1, 0x1.8258ap-1, 0x1.7a114p-1, - 0x1.71f76p-1, 0x1.6a09ep-1, 0x1.6247ep-1, 0x1.5ab08p-1, 0x1.5342cp-1, - 0x1.4bfdap-1, 0x1.44e08p-1, 0x1.3dea6p-1, 0x1.371a8p-1, 0x1.306fep-1, - 0x1.29e9ep-1, 0x1.2387ap-1, 0x1.1d488p-1, 0x1.172b8p-1, 0x1.11302p-1, - 0x1.0b558p-1, 0x1.059bp-1, 0x1p-1 }; -static const double r2[] - = { 0x1p+0, 0x1.ffa74p-1, 0x1.ff4eap-1, 0x1.fef62p-1, 0x1.fe9dap-1, - 0x1.fe452p-1, 0x1.fdeccp-1, 0x1.fd946p-1, 0x1.fd3c2p-1, 0x1.fce3ep-1, - 0x1.fc8bcp-1, 0x1.fc33ap-1, 0x1.fbdbap-1, 0x1.fb83ap-1, 0x1.fb2bcp-1, - 0x1.fad3ep-1, 0x1.fa7c2p-1, 0x1.fa246p-1, 0x1.f9ccap-1, 0x1.f975p-1, - 0x1.f91d8p-1, 0x1.f8c6p-1, 0x1.f86e8p-1, 0x1.f8172p-1, 0x1.f7bfep-1, - 0x1.f768ap-1, 0x1.f7116p-1, 0x1.f6ba4p-1, 0x1.f6632p-1, 0x1.f60c2p-1, - 0x1.f5b52p-1, 0x1.f55e4p-1, 0x1.f5076p-1 }; -static const double l1[][2] = { { 0x0p+0, 0x0p+0 }, - { -0x1.269e2038315b3p-46, 0x1.62e4eacd4p-6 }, - { -0x1.3f2558bddfc47p-45, 0x1.62e3ce7218p-5 }, - { 0x1.07ea13c34efb5p-45, 0x1.0a2ab6d3ecp-4 }, - { 0x1.8f3e77084d3bap-44, 0x1.62e4a86d8cp-4 }, - { -0x1.8d92a005f1a7ep-46, 0x1.bb9db7062cp-4 }, - { 0x1.58239e799bfe5p-44, 0x1.0a2b1a22ccp-3 }, - { -0x1.a93fcf5f593b7p-44, 0x1.3687f0a298p-3 }, - { -0x1.db4cac32fd2b5p-46, 0x1.62e4116b64p-3 }, - { -0x1.0e65a92ee0f3bp-46, 0x1.8f409e4df6p-3 }, - { -0x1.8261383d475f1p-44, 0x1.bb9d15001cp-3 }, - { -0x1.359886207513bp-44, 0x1.e7f9a8c94p-3 }, - { 0x1.811f87496ceb7p-44, 0x1.0a2b052ddbp-2 }, - { 0x1.4991ec6cb435cp-44, 0x1.205955ef73p-2 }, - { -0x1.4581abfeb8927p-44, 0x1.3687bd9121p-2 }, - { 0x1.cab48f6942703p-44, 0x1.4cb5e8f2b5p-2 }, - { -0x1.df2c452fde132p-47, 0x1.62e4420e2p-2 }, - { 0x1.6109f4fdb74bdp-45, 0x1.791292c46ap-2 }, - { -0x1.6b95fbdac7696p-44, 0x1.8f40af84e7p-2 }, - { 0x1.7394fa880cbdap-46, 0x1.a56ed8f865p-2 }, - { -0x1.50b06a94eccabp-46, 0x1.bb9d6505b4p-2 }, - { -0x1.be2abf0b38989p-44, 0x1.d1cb91e728p-2 }, - { -0x1.7d6bf1e34da04p-44, 0x1.e7f9d139e2p-2 }, - { -0x1.423c1e14de6edp-44, 0x1.fe27db9b0ep-2 }, - { 0x1.c46f1a0efbbc2p-44, 0x1.0a2b25060a8p-1 }, - { 0x1.834fe4e3e6018p-45, 0x1.154244482ap-1 }, - { 0x1.6a03d0f02b65p-46, 0x1.20597312988p-1 }, - { 0x1.d437056526f3p-44, 0x1.2b707145dep-1 }, - { -0x1.a0233728405c5p-45, 0x1.3687b0e0b28p-1 }, - { -0x1.4dbdda10d2bf1p-45, 0x1.419ec5d3f68p-1 }, - { 0x1.f7d0a25d154f2p-44, 0x1.4cb5f9fc02p-1 }, - { 0x1.15ede4d803b18p-44, 0x1.57cd28421a8p-1 }, - { 0x1.ef35793c7673p-45, 0x1.62e42fefa38p-1 } }; -static const double l2[][2] = { { 0x0p+0, 0x0p+0 }, - { 0x1.5abdac3638e99p-44, 0x1.631ec81ep-11 }, - { -0x1.16b8be9bbe239p-45, 0x1.62fd8127p-10 }, - { -0x1.364c6315542ebp-44, 0x1.0a2520508p-9 }, - { 0x1.734abe459c9p-45, 0x1.62dadc1dp-9 }, - { 0x1.0cf8a761431bfp-44, 0x1.bb9ff94dp-9 }, - { 0x1.da2718eb78708p-45, 0x1.0a2a2def8p-8 }, - { 0x1.34ada62c59b93p-44, 0x1.368c0fae4p-8 }, - { 0x1.d09ab376682d4p-44, 0x1.62e58e4f8p-8 }, - { -0x1.3cb7b94329211p-45, 0x1.8f46bd28cp-8 }, - { -0x1.eec5c297c41dp-45, 0x1.bb9f8312p-8 }, - { -0x1.6411b9395d15p-44, 0x1.e7fff8f3p-8 }, - { -0x1.1c0e59a43053cp-44, 0x1.0a2c0006ep-7 }, - { 0x1.6506596e077b6p-46, 0x1.205bdb6fp-7 }, - { 0x1.e256bce6faa27p-44, 0x1.36877c86ep-7 }, - { 0x1.bd42467b0c8d1p-51, 0x1.4cb6f5578p-7 }, - { -0x1.c4f92132ff0fp-44, 0x1.62e230e8cp-7 }, - { -0x1.80be08bfab39p-44, 0x1.7911440f6p-7 }, - { -0x1.f0b1319ceb1f7p-44, 0x1.8f443020ap-7 }, - { 0x1.a65fcfb8de99bp-45, 0x1.a572dbef4p-7 }, - { 0x1.4233885d3779cp-46, 0x1.bb9d449a6p-7 }, - { 0x1.f46a59e646edbp-44, 0x1.d1cb8491cp-7 }, - { -0x1.c3d2f11c11446p-44, 0x1.e7fd9d2aap-7 }, - { 0x1.7763f78a1e0ccp-45, 0x1.fe2b6f978p-7 }, - { 0x1.b4c37fc60c043p-44, 0x1.0a2a7c7a5p-6 }, - { -0x1.5b8a822859be3p-46, 0x1.15412ca86p-6 }, - { -0x1.f2d8c9fc064p-44, 0x1.2059c9005p-6 }, - { -0x1.e80e79c20378dp-44, 0x1.2b703f49bp-6 }, - { 0x1.68256e4329bdbp-44, 0x1.3688a1a8dp-6 }, - { 0x1.7e9741da248c3p-44, 0x1.419edc7bap-6 }, - { 0x1.e330dccce602bp-45, 0x1.4cb7034fap-6 }, - { 0x1.2f32b5d18eefbp-49, 0x1.57cd01187p-6 }, - { -0x1.269e2038315b3p-46, 0x1.62e4eacd4p-6 } }; -static const double c[] = { -0x1p-1, 0x1.555555555553p-2, -0x1.fffffffffffap-3, - 0x1.99999e33a6366p-3, -0x1.555559ef9525fp-3 }; - double __ieee754_acosh (double x) { diff --git a/sysdeps/ieee754/dbl-64/s_asincosh_data.c b/sysdeps/ieee754/dbl-64/s_asincosh_data.c new file mode 100644 index 0000000000..526262c601 --- /dev/null +++ b/sysdeps/ieee754/dbl-64/s_asincosh_data.c @@ -0,0 +1,124 @@ +/* Common data for asinh/acosh implementations. + +Copyright (c) 2023-2025 Alexei Sibidanov. + +This file is part of the CORE-MATH project +(https://core-math.gitlabpages.inria.fr/). + +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. */ + +#include "s_asincosh_data.h" + +const struct __asincosh_B_t __asincosh_B[] = { + { 301, 27565 }, { 7189, 24786 }, { 13383, 22167 }, { 18923, 19696 }, + { 23845, 17361 }, { 28184, 15150 }, { 31969, 13054 }, { 35231, 11064 }, + { 37996, 9173 }, { 40288, 7372 }, { 42129, 5657 }, { 43542, 4020 }, + { 44546, 2457 }, { 45160, 962 }, { 45399, -468 }, { 45281, -1838 }, + { 44821, -3151 }, { 44032, -4412 }, { 42929, -5622 }, { 41522, -6786 }, + { 39825, -7905 }, { 37848, -8982 }, { 35602, -10020 }, { 33097, -11020 }, + { 30341, -11985 }, { 27345, -12916 }, { 24115, -13816 }, { 20661, -14685 }, + { 16989, -15526 }, { 13107, -16339 }, { 9022, -17126 }, { 4740, -17889 } +}; +const double __asincosh_r1[] + = { 0x1p+0, 0x1.f5076p-1, 0x1.ea4bp-1, 0x1.dfc98p-1, 0x1.d5818p-1, + 0x1.cb72p-1, 0x1.c199cp-1, 0x1.b7f76p-1, 0x1.ae8ap-1, 0x1.a5504p-1, + 0x1.9c492p-1, 0x1.93738p-1, 0x1.8ace6p-1, 0x1.8258ap-1, 0x1.7a114p-1, + 0x1.71f76p-1, 0x1.6a09ep-1, 0x1.6247ep-1, 0x1.5ab08p-1, 0x1.5342cp-1, + 0x1.4bfdap-1, 0x1.44e08p-1, 0x1.3dea6p-1, 0x1.371a8p-1, 0x1.306fep-1, + 0x1.29e9ep-1, 0x1.2387ap-1, 0x1.1d488p-1, 0x1.172b8p-1, 0x1.11302p-1, + 0x1.0b558p-1, 0x1.059bp-1, 0x1p-1 }; +const double __asincosh_r2[] + = { 0x1p+0, 0x1.ffa74p-1, 0x1.ff4eap-1, 0x1.fef62p-1, 0x1.fe9dap-1, + 0x1.fe452p-1, 0x1.fdeccp-1, 0x1.fd946p-1, 0x1.fd3c2p-1, 0x1.fce3ep-1, + 0x1.fc8bcp-1, 0x1.fc33ap-1, 0x1.fbdbap-1, 0x1.fb83ap-1, 0x1.fb2bcp-1, + 0x1.fad3ep-1, 0x1.fa7c2p-1, 0x1.fa246p-1, 0x1.f9ccap-1, 0x1.f975p-1, + 0x1.f91d8p-1, 0x1.f8c6p-1, 0x1.f86e8p-1, 0x1.f8172p-1, 0x1.f7bfep-1, + 0x1.f768ap-1, 0x1.f7116p-1, 0x1.f6ba4p-1, 0x1.f6632p-1, 0x1.f60c2p-1, + 0x1.f5b52p-1, 0x1.f55e4p-1, 0x1.f5076p-1 }; +const double __asincosh_l1[][2] + = { { 0x0p+0, 0x0p+0 }, + { -0x1.269e2038315b3p-46, 0x1.62e4eacd4p-6 }, + { -0x1.3f2558bddfc47p-45, 0x1.62e3ce7218p-5 }, + { 0x1.07ea13c34efb5p-45, 0x1.0a2ab6d3ecp-4 }, + { 0x1.8f3e77084d3bap-44, 0x1.62e4a86d8cp-4 }, + { -0x1.8d92a005f1a7ep-46, 0x1.bb9db7062cp-4 }, + { 0x1.58239e799bfe5p-44, 0x1.0a2b1a22ccp-3 }, + { -0x1.a93fcf5f593b7p-44, 0x1.3687f0a298p-3 }, + { -0x1.db4cac32fd2b5p-46, 0x1.62e4116b64p-3 }, + { -0x1.0e65a92ee0f3bp-46, 0x1.8f409e4df6p-3 }, + { -0x1.8261383d475f1p-44, 0x1.bb9d15001cp-3 }, + { -0x1.359886207513bp-44, 0x1.e7f9a8c94p-3 }, + { 0x1.811f87496ceb7p-44, 0x1.0a2b052ddbp-2 }, + { 0x1.4991ec6cb435cp-44, 0x1.205955ef73p-2 }, + { -0x1.4581abfeb8927p-44, 0x1.3687bd9121p-2 }, + { 0x1.cab48f6942703p-44, 0x1.4cb5e8f2b5p-2 }, + { -0x1.df2c452fde132p-47, 0x1.62e4420e2p-2 }, + { 0x1.6109f4fdb74bdp-45, 0x1.791292c46ap-2 }, + { -0x1.6b95fbdac7696p-44, 0x1.8f40af84e7p-2 }, + { 0x1.7394fa880cbdap-46, 0x1.a56ed8f865p-2 }, + { -0x1.50b06a94eccabp-46, 0x1.bb9d6505b4p-2 }, + { -0x1.be2abf0b38989p-44, 0x1.d1cb91e728p-2 }, + { -0x1.7d6bf1e34da04p-44, 0x1.e7f9d139e2p-2 }, + { -0x1.423c1e14de6edp-44, 0x1.fe27db9b0ep-2 }, + { 0x1.c46f1a0efbbc2p-44, 0x1.0a2b25060a8p-1 }, + { 0x1.834fe4e3e6018p-45, 0x1.154244482ap-1 }, + { 0x1.6a03d0f02b65p-46, 0x1.20597312988p-1 }, + { 0x1.d437056526f3p-44, 0x1.2b707145dep-1 }, + { -0x1.a0233728405c5p-45, 0x1.3687b0e0b28p-1 }, + { -0x1.4dbdda10d2bf1p-45, 0x1.419ec5d3f68p-1 }, + { 0x1.f7d0a25d154f2p-44, 0x1.4cb5f9fc02p-1 }, + { 0x1.15ede4d803b18p-44, 0x1.57cd28421a8p-1 }, + { 0x1.ef35793c7673p-45, 0x1.62e42fefa38p-1 } }; +const double __asincosh_l2[][2] + = { { 0x0p+0, 0x0p+0 }, + { 0x1.5abdac3638e99p-44, 0x1.631ec81ep-11 }, + { -0x1.16b8be9bbe239p-45, 0x1.62fd8127p-10 }, + { -0x1.364c6315542ebp-44, 0x1.0a2520508p-9 }, + { 0x1.734abe459c9p-45, 0x1.62dadc1dp-9 }, + { 0x1.0cf8a761431bfp-44, 0x1.bb9ff94dp-9 }, + { 0x1.da2718eb78708p-45, 0x1.0a2a2def8p-8 }, + { 0x1.34ada62c59b93p-44, 0x1.368c0fae4p-8 }, + { 0x1.d09ab376682d4p-44, 0x1.62e58e4f8p-8 }, + { -0x1.3cb7b94329211p-45, 0x1.8f46bd28cp-8 }, + { -0x1.eec5c297c41dp-45, 0x1.bb9f8312p-8 }, + { -0x1.6411b9395d15p-44, 0x1.e7fff8f3p-8 }, + { -0x1.1c0e59a43053cp-44, 0x1.0a2c0006ep-7 }, + { 0x1.6506596e077b6p-46, 0x1.205bdb6fp-7 }, + { 0x1.e256bce6faa27p-44, 0x1.36877c86ep-7 }, + { 0x1.bd42467b0c8d1p-51, 0x1.4cb6f5578p-7 }, + { -0x1.c4f92132ff0fp-44, 0x1.62e230e8cp-7 }, + { -0x1.80be08bfab39p-44, 0x1.7911440f6p-7 }, + { -0x1.f0b1319ceb1f7p-44, 0x1.8f443020ap-7 }, + { 0x1.a65fcfb8de99bp-45, 0x1.a572dbef4p-7 }, + { 0x1.4233885d3779cp-46, 0x1.bb9d449a6p-7 }, + { 0x1.f46a59e646edbp-44, 0x1.d1cb8491cp-7 }, + { -0x1.c3d2f11c11446p-44, 0x1.e7fd9d2aap-7 }, + { 0x1.7763f78a1e0ccp-45, 0x1.fe2b6f978p-7 }, + { 0x1.b4c37fc60c043p-44, 0x1.0a2a7c7a5p-6 }, + { -0x1.5b8a822859be3p-46, 0x1.15412ca86p-6 }, + { -0x1.f2d8c9fc064p-44, 0x1.2059c9005p-6 }, + { -0x1.e80e79c20378dp-44, 0x1.2b703f49bp-6 }, + { 0x1.68256e4329bdbp-44, 0x1.3688a1a8dp-6 }, + { 0x1.7e9741da248c3p-44, 0x1.419edc7bap-6 }, + { 0x1.e330dccce602bp-45, 0x1.4cb7034fap-6 }, + { 0x1.2f32b5d18eefbp-49, 0x1.57cd01187p-6 }, + { -0x1.269e2038315b3p-46, 0x1.62e4eacd4p-6 } }; +const double __asincosh_c[] + = { -0x1p-1, 0x1.555555555553p-2, -0x1.fffffffffffap-3, + 0x1.99999e33a6366p-3, -0x1.555559ef9525fp-3 }; diff --git a/sysdeps/ieee754/dbl-64/s_asincosh_data.h b/sysdeps/ieee754/dbl-64/s_asincosh_data.h new file mode 100644 index 0000000000..3b2684fff6 --- /dev/null +++ b/sysdeps/ieee754/dbl-64/s_asincosh_data.h @@ -0,0 +1,50 @@ +/* Common data for asinh/acosh implementations. + +Copyright (c) 2023 Alexei Sibidanov. + +This file is part of the CORE-MATH project +(https://core-math.gitlabpages.inria.fr/). + +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. */ + +#ifndef _S_ASINCOSH_DATA_H +#define _S_ASINCOSH_DATA_H + +#include + +struct __asincosh_B_t +{ + uint16_t c0; + short c1; +}; +extern const struct __asincosh_B_t __asincosh_B[] attribute_hidden; +extern const double __asincosh_r1[] attribute_hidden; +extern const double __asincosh_r2[] attribute_hidden; +extern const double __asincosh_l1[][2] attribute_hidden; +extern const double __asincosh_l2[][2] attribute_hidden; +extern const double __asincosh_c[] attribute_hidden; + +#define B __asincosh_B +#define r1 __asincosh_r1 +#define r2 __asincosh_r2 +#define l1 __asincosh_l1 +#define l2 __asincosh_l2 +#define c __asincosh_c + +#endif diff --git a/sysdeps/ieee754/dbl-64/s_asinh.c b/sysdeps/ieee754/dbl-64/s_asinh.c index 83b3a497ae..e19ae4e0a0 100644 --- a/sysdeps/ieee754/dbl-64/s_asinh.c +++ b/sysdeps/ieee754/dbl-64/s_asinh.c @@ -29,6 +29,7 @@ SOFTWARE. #include #include #include "math_config.h" +#include "s_asincosh_data.h" static inline double fasttwosum (double x, double y, double *e) @@ -128,105 +129,6 @@ as_asinh_zero (double x, double x2h, double x2l) return y0 + y1; } -static const struct -{ - uint16_t c0; - short c1; -} B[] = { - { 301, 27565 }, { 7189, 24786 }, { 13383, 22167 }, { 18923, 19696 }, - { 23845, 17361 }, { 28184, 15150 }, { 31969, 13054 }, { 35231, 11064 }, - { 37996, 9173 }, { 40288, 7372 }, { 42129, 5657 }, { 43542, 4020 }, - { 44546, 2457 }, { 45160, 962 }, { 45399, -468 }, { 45281, -1838 }, - { 44821, -3151 }, { 44032, -4412 }, { 42929, -5622 }, { 41522, -6786 }, - { 39825, -7905 }, { 37848, -8982 }, { 35602, -10020 }, { 33097, -11020 }, - { 30341, -11985 }, { 27345, -12916 }, { 24115, -13816 }, { 20661, -14685 }, - { 16989, -15526 }, { 13107, -16339 }, { 9022, -17126 }, { 4740, -17889 } -}; -static const double r1[] - = { 0x1p+0, 0x1.f5076p-1, 0x1.ea4bp-1, 0x1.dfc98p-1, 0x1.d5818p-1, - 0x1.cb72p-1, 0x1.c199cp-1, 0x1.b7f76p-1, 0x1.ae8ap-1, 0x1.a5504p-1, - 0x1.9c492p-1, 0x1.93738p-1, 0x1.8ace6p-1, 0x1.8258ap-1, 0x1.7a114p-1, - 0x1.71f76p-1, 0x1.6a09ep-1, 0x1.6247ep-1, 0x1.5ab08p-1, 0x1.5342cp-1, - 0x1.4bfdap-1, 0x1.44e08p-1, 0x1.3dea6p-1, 0x1.371a8p-1, 0x1.306fep-1, - 0x1.29e9ep-1, 0x1.2387ap-1, 0x1.1d488p-1, 0x1.172b8p-1, 0x1.11302p-1, - 0x1.0b558p-1, 0x1.059bp-1, 0x1p-1 }; -static const double r2[] - = { 0x1p+0, 0x1.ffa74p-1, 0x1.ff4eap-1, 0x1.fef62p-1, 0x1.fe9dap-1, - 0x1.fe452p-1, 0x1.fdeccp-1, 0x1.fd946p-1, 0x1.fd3c2p-1, 0x1.fce3ep-1, - 0x1.fc8bcp-1, 0x1.fc33ap-1, 0x1.fbdbap-1, 0x1.fb83ap-1, 0x1.fb2bcp-1, - 0x1.fad3ep-1, 0x1.fa7c2p-1, 0x1.fa246p-1, 0x1.f9ccap-1, 0x1.f975p-1, - 0x1.f91d8p-1, 0x1.f8c6p-1, 0x1.f86e8p-1, 0x1.f8172p-1, 0x1.f7bfep-1, - 0x1.f768ap-1, 0x1.f7116p-1, 0x1.f6ba4p-1, 0x1.f6632p-1, 0x1.f60c2p-1, - 0x1.f5b52p-1, 0x1.f55e4p-1, 0x1.f5076p-1 }; -static const double l1[][2] = { { 0x0p+0, 0x0p+0 }, - { -0x1.269e2038315b3p-46, 0x1.62e4eacd4p-6 }, - { -0x1.3f2558bddfc47p-45, 0x1.62e3ce7218p-5 }, - { 0x1.07ea13c34efb5p-45, 0x1.0a2ab6d3ecp-4 }, - { 0x1.8f3e77084d3bap-44, 0x1.62e4a86d8cp-4 }, - { -0x1.8d92a005f1a7ep-46, 0x1.bb9db7062cp-4 }, - { 0x1.58239e799bfe5p-44, 0x1.0a2b1a22ccp-3 }, - { -0x1.a93fcf5f593b7p-44, 0x1.3687f0a298p-3 }, - { -0x1.db4cac32fd2b5p-46, 0x1.62e4116b64p-3 }, - { -0x1.0e65a92ee0f3bp-46, 0x1.8f409e4df6p-3 }, - { -0x1.8261383d475f1p-44, 0x1.bb9d15001cp-3 }, - { -0x1.359886207513bp-44, 0x1.e7f9a8c94p-3 }, - { 0x1.811f87496ceb7p-44, 0x1.0a2b052ddbp-2 }, - { 0x1.4991ec6cb435cp-44, 0x1.205955ef73p-2 }, - { -0x1.4581abfeb8927p-44, 0x1.3687bd9121p-2 }, - { 0x1.cab48f6942703p-44, 0x1.4cb5e8f2b5p-2 }, - { -0x1.df2c452fde132p-47, 0x1.62e4420e2p-2 }, - { 0x1.6109f4fdb74bdp-45, 0x1.791292c46ap-2 }, - { -0x1.6b95fbdac7696p-44, 0x1.8f40af84e7p-2 }, - { 0x1.7394fa880cbdap-46, 0x1.a56ed8f865p-2 }, - { -0x1.50b06a94eccabp-46, 0x1.bb9d6505b4p-2 }, - { -0x1.be2abf0b38989p-44, 0x1.d1cb91e728p-2 }, - { -0x1.7d6bf1e34da04p-44, 0x1.e7f9d139e2p-2 }, - { -0x1.423c1e14de6edp-44, 0x1.fe27db9b0ep-2 }, - { 0x1.c46f1a0efbbc2p-44, 0x1.0a2b25060a8p-1 }, - { 0x1.834fe4e3e6018p-45, 0x1.154244482ap-1 }, - { 0x1.6a03d0f02b65p-46, 0x1.20597312988p-1 }, - { 0x1.d437056526f3p-44, 0x1.2b707145dep-1 }, - { -0x1.a0233728405c5p-45, 0x1.3687b0e0b28p-1 }, - { -0x1.4dbdda10d2bf1p-45, 0x1.419ec5d3f68p-1 }, - { 0x1.f7d0a25d154f2p-44, 0x1.4cb5f9fc02p-1 }, - { 0x1.15ede4d803b18p-44, 0x1.57cd28421a8p-1 }, - { 0x1.ef35793c7673p-45, 0x1.62e42fefa38p-1 } }; -static const double l2[][2] = { { 0x0p+0, 0x0p+0 }, - { 0x1.5abdac3638e99p-44, 0x1.631ec81ep-11 }, - { -0x1.16b8be9bbe239p-45, 0x1.62fd8127p-10 }, - { -0x1.364c6315542ebp-44, 0x1.0a2520508p-9 }, - { 0x1.734abe459c9p-45, 0x1.62dadc1dp-9 }, - { 0x1.0cf8a761431bfp-44, 0x1.bb9ff94dp-9 }, - { 0x1.da2718eb78708p-45, 0x1.0a2a2def8p-8 }, - { 0x1.34ada62c59b93p-44, 0x1.368c0fae4p-8 }, - { 0x1.d09ab376682d4p-44, 0x1.62e58e4f8p-8 }, - { -0x1.3cb7b94329211p-45, 0x1.8f46bd28cp-8 }, - { -0x1.eec5c297c41dp-45, 0x1.bb9f8312p-8 }, - { -0x1.6411b9395d15p-44, 0x1.e7fff8f3p-8 }, - { -0x1.1c0e59a43053cp-44, 0x1.0a2c0006ep-7 }, - { 0x1.6506596e077b6p-46, 0x1.205bdb6fp-7 }, - { 0x1.e256bce6faa27p-44, 0x1.36877c86ep-7 }, - { 0x1.bd42467b0c8d1p-51, 0x1.4cb6f5578p-7 }, - { -0x1.c4f92132ff0fp-44, 0x1.62e230e8cp-7 }, - { -0x1.80be08bfab39p-44, 0x1.7911440f6p-7 }, - { -0x1.f0b1319ceb1f7p-44, 0x1.8f443020ap-7 }, - { 0x1.a65fcfb8de99bp-45, 0x1.a572dbef4p-7 }, - { 0x1.4233885d3779cp-46, 0x1.bb9d449a6p-7 }, - { 0x1.f46a59e646edbp-44, 0x1.d1cb8491cp-7 }, - { -0x1.c3d2f11c11446p-44, 0x1.e7fd9d2aap-7 }, - { 0x1.7763f78a1e0ccp-45, 0x1.fe2b6f978p-7 }, - { 0x1.b4c37fc60c043p-44, 0x1.0a2a7c7a5p-6 }, - { -0x1.5b8a822859be3p-46, 0x1.15412ca86p-6 }, - { -0x1.f2d8c9fc064p-44, 0x1.2059c9005p-6 }, - { -0x1.e80e79c20378dp-44, 0x1.2b703f49bp-6 }, - { 0x1.68256e4329bdbp-44, 0x1.3688a1a8dp-6 }, - { 0x1.7e9741da248c3p-44, 0x1.419edc7bap-6 }, - { 0x1.e330dccce602bp-45, 0x1.4cb7034fap-6 }, - { 0x1.2f32b5d18eefbp-49, 0x1.57cd01187p-6 }, - { -0x1.269e2038315b3p-46, 0x1.62e4eacd4p-6 } }; -static const double c[] = { -0x1p-1, 0x1.555555555553p-2, -0x1.fffffffffffap-3, - 0x1.99999e33a6366p-3, -0x1.555559ef9525fp-3 }; - double __asinh (double x) { -- 2.47.3