pxfm 0.1.4

Fast and accurate math
Documentation
/*
 * // Copyright (c) Radzivon Bartoshyk 6/2025. All rights reserved.
 * //
 * // Redistribution and use in source and binary forms, with or without modification,
 * // are permitted provided that the following conditions are met:
 * //
 * // 1.  Redistributions of source code must retain the above copyright notice, this
 * // list of conditions and the following disclaimer.
 * //
 * // 2.  Redistributions in binary form must reproduce the above copyright notice,
 * // this list of conditions and the following disclaimer in the documentation
 * // and/or other materials provided with the distribution.
 * //
 * // 3.  Neither the name of the copyright holder nor the names of its
 * // contributors may be used to endorse or promote products derived from
 * // this software without specific prior written permission.
 * //
 * // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 * // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 * // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

pub(crate) static SINCOS_PI_SN2: [(u64, u64); 33] = [
    (0x0000000000000000, 0x0000000000000000),
    (0xbc2912bd0d569a90, 0x3fa91f65f10dd814),
    (0xbc3e2718d26ed688, 0x3fb917a6bc29b42c),
    (0x3c513000a89a11e0, 0x3fc2c8106e8e613a),
    (0xbc626d19b9ff8d82, 0x3fc8f8b83c69a60b),
    (0xbc642deef11da2c4, 0x3fcf19f97b215f1b),
    (0xbc75d28da2c4612d, 0x3fd294062ed59f06),
    (0xbc1efdc0d58cf620, 0x3fd58f9a75ab1fdd),
    (0xbc672cedd3d5a610, 0x3fd87de2a6aea963),
    (0x3c65b362cb974183, 0x3fdb5d1009e15cc0),
    (0x3c5e0d891d3c6841, 0x3fde2b5d3806f63b),
    (0xbc8a5a014347406c, 0x3fe073879922ffee),
    (0x3c8b25dd267f6600, 0x3fe1c73b39ae68c8),
    (0xbc6efcc626f74a6f, 0x3fe30ff7fce17035),
    (0x3c68076a2cfdc6b3, 0x3fe44cf325091dd6),
    (0xbc875720992bfbb2, 0x3fe57d69348ceca0),
    (0xbc8bdd3413b26456, 0x3fe6a09e667f3bcd),
    (0xbc70f537acdf0ad7, 0x3fe7b5df226aafaf),
    (0xbc82c5e12ed1336d, 0x3fe8bc806b151741),
    (0xbc830ee286712474, 0x3fe9b3e047f38741),
    (0x3c39f630e8b6dac8, 0x3fea9b66290ea1a3),
    (0xbc8bc69f324e6d61, 0x3feb728345196e3e),
    (0xbc76e0b1757c8d07, 0x3fec38b2f180bdb1),
    (0xbc5e7b6bb5ab58ae, 0x3feced7af43cc773),
    (0x3c7457e610231ac2, 0x3fed906bcf328d46),
    (0xbc8014c76c126527, 0x3fee212104f686e5),
    (0x3c8760b1e2e3f81e, 0x3fee9f4156c62dda),
    (0x3c752c7adc6b4989, 0x3fef0a7efb9230d7),
    (0x3c7562172a361fd3, 0x3fef6297cff75cb0),
    (0xbc87a0a8ca13571f, 0x3fefa7557f08a517),
    (0xbc887df6378811c7, 0x3fefd88da3d12526),
    (0xbc6c57bc2e24aa15, 0x3feff621e3796d7e),
    (0x0000000000000000, 0x3ff0000000000000),
];

pub(crate) static SINCOS_PI_SM2: [(u64, u64); 32] = [
    (0x0000000000000000, 0x0000000000000000),
    (0xbbfee52e284a9df8, 0x3f5921faaee6472e),
    (0x3c02ba407bcab5b2, 0x3f6921f8becca4ba),
    (0x3c13e5a15ed6aa3e, 0x3f72d97822f996bc),
    (0x3bfab967fe6b7a9b, 0x3f7921f0fe670071),
    (0xbc1de8c48783f3ae, 0x3f7f6a65f9a2a3c6),
    (0xbc01e9131ff52dc9, 0x3f82d96b0e509703),
    (0xbc2ff59bf4b574ee, 0x3f85fda037ac05e1),
    (0x3c29878ebe836d9d, 0x3f8921d1fcdec784),
    (0x3c04060e4bd32e79, 0x3f8c45ffe1e48ad9),
    (0xbc2f2943d8fe7033, 0x3f8f6a296ab997cb),
    (0x3c08769e00e01800, 0x3f9147270dad7133),
    (0x3c2b5f91ee371d64, 0x3f92d936bbe30efd),
    (0x3c3ff9f89fb65be3, 0x3f946b4381fce81b),
    (0xbc20c0a91c37851c, 0x3f95fd4d21fab226),
    (0x3c2b194ad9b1aa97, 0x3f978f535ddc9f04),
    (0xbbfb1d63091a0130, 0x3f992155f7a3667e),
    (0xbc32ae47937cbdd3, 0x3f9ab354b1504fca),
    (0xbc3d63d7fef0e36c, 0x3f9c454f4ce53b1d),
    (0xbc3d653df3fcc281, 0x3f9dd7458c64ab3a),
    (0xbbd3fe9bc66286c7, 0x3f9f693731d1cf01),
    (0xbc3ae248da7a9007, 0x3fa07d91ff984580),
    (0xbc42890d277cb974, 0x3fa14685db42c17f),
    (0xbc4ec1b9d46693b1, 0x3fa20f770ceb11c7),
    (0x3c2686f65ba93ac0, 0x3fa2d865759455cd),
    (0x3c3f8a318ba775fd, 0x3fa3a150f6421afc),
    (0x3c2136ac00fa2da9, 0x3fa46a396ff86179),
    (0x3c2442f2a9dac128, 0x3fa5331ec3bba0eb),
    (0x3c4a2669a693a8e1, 0x3fa5fc00d290cd43),
    (0xbc339c56a9bd0a9b, 0x3fa6c4df7d7d5b84),
    (0xbc34a0ef4035c29c, 0x3fa78dbaa5874686),
    (0x3c491adfd607cb2b, 0x3fa856922bb513c1),
];

pub(crate) static SINCOS_PI_CM2: [(u64, u64); 32] = [
    (0x0000000000000000, 0x0000000000000000),
    (0x3b5874628d2b6835, 0x3eb3bd3c88cdca13),
    (0xbb48a1bebf665cef, 0x3ed3bd3bc5fc5ab4),
    (0x3b6198ff5804d8dc, 0x3ee634e1d173443d),
    (0x3b9c73be2184804e, 0x3ef3bd38bab6d94c),
    (0xbb9bcd47bf19555b, 0x3efed7a51288a277),
    (0xbba3fff35c1bdb61, 0x3f0634da1cec522d),
    (0x3baae49f0be31e8c, 0x3f0e39b20c7444e3),
    (0x3ba70df810bcc0e2, 0x3f13bd2c8da49511),
    (0x3b9079ff34bffa7e, 0x3f18fb66ee122f6c),
    (0xbba983278baa11c2, 0x3f1ed7875885ea3a),
    (0xbbbe4938f661aa14, 0x3f22a8c672d4942f),
    (0x3bce64c904cc8156, 0x3f2634bb4ae5ed49),
    (0x3bbf7469ecc1331f, 0x3f2a0fa1a872536e),
    (0x3bc5eb897cdc1b0d, 0x3f2e3978f34889d9),
    (0x3bc9865d9cdc3744, 0x3f31592043856dbd),
    (0xbbd595d548d9a586, 0x3f33bcfbd9979a27),
    (0xbbb91df31aaa6f7f, 0x3f36484edd7f9e4a),
    (0xbbd4eaa508eec2b7, 0x3f38fb18eacc3af8),
    (0xbba7c51f7d8f9f71, 0x3f3bd55996f62d2e),
    (0xbbdf4827ccb50b62, 0x3f3ed71071603e86),
    (0xbbd12f4a2e3616d5, 0x3f41001e81abab48),
    (0x3be604e1f8f76c27, 0x3f42a86f68094692),
    (0xbbe1a79a86fb8ff5, 0x3f44647aaa599ed1),
    (0x3be33736c96557c9, 0x3f46344004228d8b),
    (0x3befc0555a81d729, 0x3f4817bf2ddf22b3),
    (0x3be54d46b817bca4, 0x3f4a0ef7dcffafab),
    (0xbb970a980659e790, 0x3f4c19e9c3e9d2c5),
    (0x3bec7313beeab883, 0x3f4e389491f8833a),
    (0xbbf965827f33d907, 0x3f50357bf9be0ecf),
    (0x3bc98094fab77b42, 0x3f515889c8dd385f),
    (0xbbfbfdfce09aea7b, 0x3f52857389776587),
];

pub(crate) static SINPI_SN1: [(u64, u64); 33] = [
    (0x0000000000000000, 0x0000000000000000),
    (0xbe1de44fd832257a, 0x3fa91f6600000000),
    (0xbe0eb25ea0f138c7, 0x3fb917a6c0000000),
    (0x3e3d1cc27444c003, 0x3fc2c81060000000),
    (0xbe1cb2cfaa4da337, 0x3fc8f8b840000000),
    (0xbe237a839542deef, 0x3fcf19f980000000),
    (0xbe12a60fa574a369, 0x3fd2940630000000),
    (0x3e36ac7f73f84090, 0x3fd58f9a70000000),
    (0x3e3abaa58b469891, 0x3fd87de2a0000000),
    (0xbe387a8cff5264ea, 0x3fdb5d1010000000),
    (0xbe3fe4271387c9dc, 0x3fde2b5d40000000),
    (0x3e222ffed9697faf, 0x3fe0738798000000),
    (0x3e2ae68c86c9774a, 0x3fe1c73b38000000),
    (0xbe38f47e58f7e631, 0x3fe30ff800000000),
    (0xbe37b7114f3fc4af, 0x3fe44cf328000000),
    (0xbe3b989b02eae413, 0x3fe57d6938000000),
    (0xbe280c4336f74d05, 0x3fe6a09e68000000),
    (0x3e33557d76f0ac85, 0x3fe7b5df20000000),
    (0x3e38a8ba05a743da, 0x3fe8bc8068000000),
    (0xbdd8f17e98771434, 0x3fe9b3e048000000),
    (0x3e20ea1a3033ec62, 0x3fea9b6628000000),
    (0xbe37348e1378d3e6, 0x3feb728348000000),
    (0x3e280bdb0d23e9d1, 0x3fec38b2f0000000),
    (0xbe3e19c46879edaf, 0x3feced7af8000000),
    (0xbe19ae573aea067c, 0x3fed906bd0000000),
    (0xbe384bc8da0298ee, 0x3fee212108000000),
    (0xbe239d225a27d387, 0x3fee9f4158000000),
    (0x3e3c9186b952c7ae, 0x3fef0a7ef8000000),
    (0xbdd1469faa77a357, 0x3fef6297d0000000),
    (0xbe1eeb5d2bd05465, 0x3fefa75580000000),
    (0x3e3e89292cf04139, 0x3fefd88da0000000),
    (0x3e3bcb6bef1d421f, 0x3feff621e0000000),
    (0x0000000000000000, 0x3ff0000000000000),
];

pub(crate) static SINPI_SM1: [(u64, u64); 32] = [
    (0x0000000000000000, 0x0000000000000000),
    (0xbe354466e349ee53, 0x3f59220000000000),
    (0x3e17d99497495d20, 0x3f6921f800000000),
    (0x3e017ccb5e27cb43, 0x3f72d97800000000),
    (0x3e2fcce00e23572d, 0x3f7921f000000000),
    (0x3e3f9a2a3c5885cf, 0x3f7f6a6400000000),
    (0xbe3e35ed1fa23d22, 0x3f82d96c00000000),
    (0x3e1bd602f04014c8, 0x3f85fda000000000),
    (0xbdd909c3dccf0e28, 0x3f8921d200000000),
    (0xbe0e1b7526ebf9f2, 0x3f8c460000000000),
    (0xbe32a8cd06af94a2, 0x3f8f6a2a00000000),
    (0x3e0b5ae26618769e, 0x3f91472700000000),
    (0xbe31073c40b25037, 0x3f92d93700000000),
    (0xbe3f80c5f9200607, 0x3f946b4400000000),
    (0x3e20fd5912ef3f57, 0x3f95fd4d00000000),
    (0x3e377727c10d8ca5, 0x3f978f5300000000),
    (0xbe00b933040d8eb2, 0x3f99215600000000),
    (0xbe33abec0d92ae48, 0x3f9ab35500000000),
    (0x3e33394ec7229c28, 0x3f9c454f00000000),
    (0xbe3ce6d5319d653e, 0x3f9dd74600000000),
    (0x3e28e8e7807f600b, 0x3f9f693700000000),
    (0xbdc9eea00d71246d, 0x3fa07d9200000000),
    (0xbe325e9f40a5121a, 0x3fa1468600000000),
    (0x3e19d6238d09f231, 0x3fa20f7700000000),
    (0xbe14d75465d2f213, 0x3fa2d86580000000),
    (0xbe137bca0781d73a, 0x3fa3a15100000000),
    (0xbe20079e86eec954, 0x3fa46a3980000000),
    (0xbe3e222f8a75de87, 0x3fa5331f00000000),
    (0xbe36b7995e4bb32d, 0x3fa5fc0100000000),
    (0xbdf41523e139c56b, 0x3fa6c4df80000000),
    (0x3e32c3a342eb5f11, 0x3fa78dba80000000),
    (0x3e35da89e0b235c0, 0x3fa8569200000000),
];

pub(crate) static SINPI_CM1: [(u64, u64); 32] = [
    (0x0000000000000000, 0x3ff0000000000000),
    (0x3e061bb991af64f1, 0x3feffffd88000000),
    (0x3e2621d01d2a6063, 0x3feffff620000000),
    (0x3e38f17465de1773, 0x3fefffe9c8000000),
    (0xbe338bab6d94c71d, 0x3fefffd888000000),
    (0x3e16bb5dd7625bcd, 0x3fefffc250000000),
    (0xbe3b439d8a459600, 0x3fefffa730000000),
    (0x3e237ce2eec7251b, 0x3fefff8718000000),
    (0xbe2646d24a88970e, 0x3fefff6218000000),
    (0xbe39bb848bdb041e, 0x3fefff3828000000),
    (0x3e3e29de85718cc2, 0x3fefff0940000000),
    (0x3e3cc695b5e89e49, 0x3feffed570000000),
    (0xbe3da572f6a4bcca, 0x3feffe9cb8000000),
    (0xbe30d43929b71f74, 0x3feffe5f08000000),
    (0x3e0c32ddd89aa147, 0x3feffe1c68000000),
    (0x3e3fbc7a9242ccf3, 0x3feffdd4d8000000),
    (0x3e1099a19765595d, 0x3feffd8860000000),
    (0xbe2dbaff3c93cdc4, 0x3feffd36f8000000),
    (0xbe38eacc3af7ac55, 0x3feffce0a0000000),
    (0xbe3996f62d2df41d, 0x3feffc8558000000),
    (0xbe3071603e8582df, 0x3feffc2520000000),
    (0x3e07e5454b8225e9, 0x3feffbbff8000000),
    (0xbe3ed0128d24b027, 0x3feffb55e8000000),
    (0x3e25569984bd1a7a, 0x3feffae6e0000000),
    (0xbda08a362d33736d, 0x3feffa72f0000000),
    (0x3dfa441ba9901fd5, 0x3feff9fa10000000),
    (0x3e304600a0a95596, 0x3feff97c40000000),
    (0xbe3387d3a589fa3d, 0x3feff8f988000000),
    (0x3e36dc0ef98b1c67, 0x3feff871d8000000),
    (0x3e301907c4c59658, 0x3feff7e540000000),
    (0x3e38dc8b1e83ccff, 0x3feff753b8000000),
    (0xbe2c4bbb2c348040, 0x3feff6bd48000000),
];