asinhf.c   [plain text]


#include "math.h"
#include <stdint.h>

static const double logf_table[] = {
	0x0.0000000000000p+0,	0x1.0000000000000p+0, // log1p(0.00000), 1/1.00000
	0x1.ff00aa2b10bc0p-9,	0x1.fe01fe01fe020p-1, // log1p(0.00391), 1/1.00391
	0x1.fe02a6b106789p-8,	0x1.fc07f01fc07f0p-1, // log1p(0.00781), 1/1.00781
	0x1.7dc475f810a77p-7,	0x1.fa11caa01fa12p-1, // log1p(0.01172), 1/1.01172
	0x1.fc0a8b0fc03e4p-7,	0x1.f81f81f81f820p-1, // log1p(0.01562), 1/1.01562
	0x1.3cea44346a575p-6,	0x1.f6310aca0dbb5p-1, // log1p(0.01953), 1/1.01953
	0x1.7b91b07d5b11bp-6,	0x1.f44659e4a4271p-1, // log1p(0.02344), 1/1.02344
	0x1.b9fc027af9198p-6,	0x1.f25f644230ab5p-1, // log1p(0.02734), 1/1.02734
	0x1.f829b0e783300p-6,	0x1.f07c1f07c1f08p-1, // log1p(0.03125), 1/1.03125
	0x1.1b0d98923d980p-5,	0x1.ee9c7f8458e02p-1, // log1p(0.03516), 1/1.03516
	0x1.39e87b9febd60p-5,	0x1.ecc07b301ecc0p-1, // log1p(0.03906), 1/1.03906
	0x1.58a5bafc8e4d5p-5,	0x1.eae807aba01ebp-1, // log1p(0.04297), 1/1.04297
	0x1.77458f632dcfcp-5,	0x1.e9131abf0b767p-1, // log1p(0.04688), 1/1.04688
	0x1.95c830ec8e3ebp-5,	0x1.e741aa59750e4p-1, // log1p(0.05078), 1/1.05078
	0x1.b42dd711971bfp-5,	0x1.e573ac901e574p-1, // log1p(0.05469), 1/1.05469
	0x1.d276b8adb0b52p-5,	0x1.e3a9179dc1a73p-1, // log1p(0.05859), 1/1.05859
	0x1.f0a30c01162a6p-5,	0x1.e1e1e1e1e1e1ep-1, // log1p(0.06250), 1/1.06250
	0x1.075983598e471p-4,	0x1.e01e01e01e01ep-1, // log1p(0.06641), 1/1.06641
	0x1.16536eea37ae1p-4,	0x1.de5d6e3f8868ap-1, // log1p(0.07031), 1/1.07031
	0x1.253f62f0a1417p-4,	0x1.dca01dca01dcap-1, // log1p(0.07422), 1/1.07422
	0x1.341d7961bd1d1p-4,	0x1.dae6076b981dbp-1, // log1p(0.07812), 1/1.07812
	0x1.42edcbea646f0p-4,	0x1.d92f2231e7f8ap-1, // log1p(0.08203), 1/1.08203
	0x1.51b073f06183fp-4,	0x1.d77b654b82c34p-1, // log1p(0.08594), 1/1.08594
	0x1.60658a93750c4p-4,	0x1.d5cac807572b2p-1, // log1p(0.08984), 1/1.08984
	0x1.6f0d28ae56b4cp-4,	0x1.d41d41d41d41dp-1, // log1p(0.09375), 1/1.09375
	0x1.7da766d7b12cdp-4,	0x1.d272ca3fc5b1ap-1, // log1p(0.09766), 1/1.09766
	0x1.8c345d6319b21p-4,	0x1.d0cb58f6ec074p-1, // log1p(0.10156), 1/1.10156
	0x1.9ab42462033adp-4,	0x1.cf26e5c44bfc6p-1, // log1p(0.10547), 1/1.10547
	0x1.a926d3a4ad563p-4,	0x1.cd85689039b0bp-1, // log1p(0.10938), 1/1.10938
	0x1.b78c82bb0eda1p-4,	0x1.cbe6d9601cbe7p-1, // log1p(0.11328), 1/1.11328
	0x1.c5e548f5bc743p-4,	0x1.ca4b3055ee191p-1, // log1p(0.11719), 1/1.11719
	0x1.d4313d66cb35dp-4,	0x1.c8b265afb8a42p-1, // log1p(0.12109), 1/1.12109
	0x1.e27076e2af2e6p-4,	0x1.c71c71c71c71cp-1, // log1p(0.12500), 1/1.12500
	0x1.f0a30c01162a6p-4,	0x1.c5894d10d4986p-1, // log1p(0.12891), 1/1.12891
	0x1.fec9131dbeabbp-4,	0x1.c3f8f01c3f8f0p-1, // log1p(0.13281), 1/1.13281
	0x1.0671512ca596ep-3,	0x1.c26b5392ea01cp-1, // log1p(0.13672), 1/1.13672
	0x1.0d77e7cd08e59p-3,	0x1.c0e070381c0e0p-1, // log1p(0.14062), 1/1.14062
	0x1.14785846742acp-3,	0x1.bf583ee868d8bp-1, // log1p(0.14453), 1/1.14453
	0x1.1b72ad52f67a0p-3,	0x1.bdd2b899406f7p-1, // log1p(0.14844), 1/1.14844
	0x1.2266f190a5acbp-3,	0x1.bc4fd65883e7bp-1, // log1p(0.15234), 1/1.15234
	0x1.29552f81ff523p-3,	0x1.bacf914c1bad0p-1, // log1p(0.15625), 1/1.15625
	0x1.303d718e47fd3p-3,	0x1.b951e2b18ff23p-1, // log1p(0.16016), 1/1.16016
	0x1.371fc201e8f74p-3,	0x1.b7d6c3dda338bp-1, // log1p(0.16406), 1/1.16406
	0x1.3dfc2b0ecc62ap-3,	0x1.b65e2e3beee05p-1, // log1p(0.16797), 1/1.16797
	0x1.44d2b6ccb7d1ep-3,	0x1.b4e81b4e81b4fp-1, // log1p(0.17188), 1/1.17188
	0x1.4ba36f39a55e5p-3,	0x1.b37484ad806cep-1, // log1p(0.17578), 1/1.17578
	0x1.526e5e3a1b438p-3,	0x1.b2036406c80d9p-1, // log1p(0.17969), 1/1.17969
	0x1.59338d9982086p-3,	0x1.b094b31d922a4p-1, // log1p(0.18359), 1/1.18359
	0x1.5ff3070a793d4p-3,	0x1.af286bca1af28p-1, // log1p(0.18750), 1/1.18750
	0x1.66acd4272ad51p-3,	0x1.adbe87f94905ep-1, // log1p(0.19141), 1/1.19141
	0x1.6d60fe719d21dp-3,	0x1.ac5701ac5701bp-1, // log1p(0.19531), 1/1.19531
	0x1.740f8f54037a5p-3,	0x1.aaf1d2f87ebfdp-1, // log1p(0.19922), 1/1.19922
	0x1.7ab890210d909p-3,	0x1.a98ef606a63bep-1, // log1p(0.20312), 1/1.20312
	0x1.815c0a14357ebp-3,	0x1.a82e65130e159p-1, // log1p(0.20703), 1/1.20703
	0x1.87fa06520c911p-3,	0x1.a6d01a6d01a6dp-1, // log1p(0.21094), 1/1.21094
	0x1.8e928de886d41p-3,	0x1.a574107688a4ap-1, // log1p(0.21484), 1/1.21484
	0x1.9525a9cf456b4p-3,	0x1.a41a41a41a41ap-1, // log1p(0.21875), 1/1.21875
	0x1.9bb362e7dfb83p-3,	0x1.a2c2a87c51ca0p-1, // log1p(0.22266), 1/1.22266
	0x1.a23bc1fe2b563p-3,	0x1.a16d3f97a4b02p-1, // log1p(0.22656), 1/1.22656
	0x1.a8becfc882f19p-3,	0x1.a01a01a01a01ap-1, // log1p(0.23047), 1/1.23047
	0x1.af3c94e80bff3p-3,	0x1.9ec8e951033d9p-1, // log1p(0.23438), 1/1.23438
	0x1.b5b519e8fb5a4p-3,	0x1.9d79f176b682dp-1, // log1p(0.23828), 1/1.23828
	0x1.bc286742d8cd6p-3,	0x1.9c2d14ee4a102p-1, // log1p(0.24219), 1/1.24219
	0x1.c2968558c18c1p-3,	0x1.9ae24ea5510dap-1, // log1p(0.24609), 1/1.24609
	0x1.c8ff7c79a9a22p-3,	0x1.999999999999ap-1, // log1p(0.25000), 1/1.25000
	0x1.cf6354e09c5dcp-3,	0x1.9852f0d8ec0ffp-1, // log1p(0.25391), 1/1.25391
	0x1.d5c216b4fbb91p-3,	0x1.970e4f80cb872p-1, // log1p(0.25781), 1/1.25781
	0x1.dc1bca0abec7dp-3,	0x1.95cbb0be377aep-1, // log1p(0.26172), 1/1.26172
	0x1.e27076e2af2e6p-3,	0x1.948b0fcd6e9e0p-1, // log1p(0.26562), 1/1.26562
	0x1.e8c0252aa5a60p-3,	0x1.934c67f9b2ce6p-1, // log1p(0.26953), 1/1.26953
	0x1.ef0adcbdc5936p-3,	0x1.920fb49d0e229p-1, // log1p(0.27344), 1/1.27344
	0x1.f550a564b7b37p-3,	0x1.90d4f120190d5p-1, // log1p(0.27734), 1/1.27734
	0x1.fb9186d5e3e2bp-3,	0x1.8f9c18f9c18fap-1, // log1p(0.28125), 1/1.28125
	0x1.00e6c45ad501dp-2,	0x1.8e6527af1373fp-1, // log1p(0.28516), 1/1.28516
	0x1.0402594b4d041p-2,	0x1.8d3018d3018d3p-1, // log1p(0.28906), 1/1.28906
	0x1.071b85fcd590dp-2,	0x1.8bfce8062ff3ap-1, // log1p(0.29297), 1/1.29297
	0x1.0a324e27390e3p-2,	0x1.8acb90f6bf3aap-1, // log1p(0.29688), 1/1.29688
	0x1.0d46b579ab74bp-2,	0x1.899c0f601899cp-1, // log1p(0.30078), 1/1.30078
	0x1.1058bf9ae4ad5p-2,	0x1.886e5f0abb04ap-1, // log1p(0.30469), 1/1.30469
	0x1.136870293a8b0p-2,	0x1.87427bcc092b9p-1, // log1p(0.30859), 1/1.30859
	0x1.1675cababa60ep-2,	0x1.8618618618618p-1, // log1p(0.31250), 1/1.31250
	0x1.1980d2dd4236fp-2,	0x1.84f00c2780614p-1, // log1p(0.31641), 1/1.31641
	0x1.1c898c16999fbp-2,	0x1.83c977ab2beddp-1, // log1p(0.32031), 1/1.32031
	0x1.1f8ff9e48a2f3p-2,	0x1.82a4a0182a4a0p-1, // log1p(0.32422), 1/1.32422
	0x1.22941fbcf7966p-2,	0x1.8181818181818p-1, // log1p(0.32812), 1/1.32812
	0x1.2596010df763ap-2,	0x1.8060180601806p-1, // log1p(0.33203), 1/1.33203
	0x1.2895a13de86a3p-2,	0x1.7f405fd017f40p-1, // log1p(0.33594), 1/1.33594
	0x1.2b9303ab89d25p-2,	0x1.7e225515a4f1dp-1, // log1p(0.33984), 1/1.33984
	0x1.2e8e2bae11d31p-2,	0x1.7d05f417d05f4p-1, // log1p(0.34375), 1/1.34375
	0x1.31871c9544185p-2,	0x1.7beb3922e017cp-1, // log1p(0.34766), 1/1.34766
	0x1.347dd9a987d55p-2,	0x1.7ad2208e0ecc3p-1, // log1p(0.35156), 1/1.35156
	0x1.3772662bfd85bp-2,	0x1.79baa6bb6398bp-1, // log1p(0.35547), 1/1.35547
	0x1.3a64c556945eap-2,	0x1.78a4c8178a4c8p-1, // log1p(0.35938), 1/1.35938
	0x1.3d54fa5c1f710p-2,	0x1.77908119ac60dp-1, // log1p(0.36328), 1/1.36328
	0x1.404308686a7e4p-2,	0x1.767dce434a9b1p-1, // log1p(0.36719), 1/1.36719
	0x1.432ef2a04e814p-2,	0x1.756cac201756dp-1, // log1p(0.37109), 1/1.37109
	0x1.4618bc21c5ec2p-2,	0x1.745d1745d1746p-1, // log1p(0.37500), 1/1.37500
	0x1.49006804009d1p-2,	0x1.734f0c541fe8dp-1, // log1p(0.37891), 1/1.37891
	0x1.4be5f957778a1p-2,	0x1.724287f46debcp-1, // log1p(0.38281), 1/1.38281
	0x1.4ec973260026ap-2,	0x1.713786d9c7c09p-1, // log1p(0.38672), 1/1.38672
	0x1.51aad872df82dp-2,	0x1.702e05c0b8170p-1, // log1p(0.39062), 1/1.39062
	0x1.548a2c3add263p-2,	0x1.6f26016f26017p-1, // log1p(0.39453), 1/1.39453
	0x1.5767717455a6cp-2,	0x1.6e1f76b4337c7p-1, // log1p(0.39844), 1/1.39844
	0x1.5a42ab0f4cfe2p-2,	0x1.6d1a62681c861p-1, // log1p(0.40234), 1/1.40234
	0x1.5d1bdbf5809cap-2,	0x1.6c16c16c16c17p-1, // log1p(0.40625), 1/1.40625
	0x1.5ff3070a793d4p-2,	0x1.6b1490aa31a3dp-1, // log1p(0.41016), 1/1.41016
	0x1.62c82f2b9c795p-2,	0x1.6a13cd1537290p-1, // log1p(0.41406), 1/1.41406
	0x1.659b57303e1f3p-2,	0x1.691473a88d0c0p-1, // log1p(0.41797), 1/1.41797
	0x1.686c81e9b14afp-2,	0x1.6816816816817p-1, // log1p(0.42188), 1/1.42188
	0x1.6b3bb2235943ep-2,	0x1.6719f3601671ap-1, // log1p(0.42578), 1/1.42578
	0x1.6e08eaa2ba1e4p-2,	0x1.661ec6a5122f9p-1, // log1p(0.42969), 1/1.42969
	0x1.70d42e2789236p-2,	0x1.6524f853b4aa3p-1, // log1p(0.43359), 1/1.43359
	0x1.739d7f6bbd007p-2,	0x1.642c8590b2164p-1, // log1p(0.43750), 1/1.43750
	0x1.7664e1239dbcfp-2,	0x1.63356b88ac0dep-1, // log1p(0.44141), 1/1.44141
	0x1.792a55fdd47a2p-2,	0x1.623fa77016240p-1, // log1p(0.44531), 1/1.44531
	0x1.7bede0a37afc0p-2,	0x1.614b36831ae94p-1, // log1p(0.44922), 1/1.44922
	0x1.7eaf83b82afc3p-2,	0x1.6058160581606p-1, // log1p(0.45312), 1/1.45312
	0x1.816f41da0d496p-2,	0x1.5f66434292dfcp-1, // log1p(0.45703), 1/1.45703
	0x1.842d1da1e8b17p-2,	0x1.5e75bb8d015e7p-1, // log1p(0.46094), 1/1.46094
	0x1.86e919a330ba0p-2,	0x1.5d867c3ece2a5p-1, // log1p(0.46484), 1/1.46484
	0x1.89a3386c1425bp-2,	0x1.5c9882b931057p-1, // log1p(0.46875), 1/1.46875
	0x1.8c5b7c858b48bp-2,	0x1.5babcc647fa91p-1, // log1p(0.47266), 1/1.47266
	0x1.8f11e873662c7p-2,	0x1.5ac056b015ac0p-1, // log1p(0.47656), 1/1.47656
	0x1.91c67eb45a83ep-2,	0x1.59d61f123ccaap-1, // log1p(0.48047), 1/1.48047
	0x1.947941c2116fbp-2,	0x1.58ed2308158edp-1, // log1p(0.48438), 1/1.48438
	0x1.972a341135158p-2,	0x1.5805601580560p-1, // log1p(0.48828), 1/1.48828
	0x1.99d958117e08bp-2,	0x1.571ed3c506b3ap-1, // log1p(0.49219), 1/1.49219
	0x1.9c86b02dc0863p-2,	0x1.56397ba7c52e2p-1, // log1p(0.49609), 1/1.49609
	0x1.9f323ecbf984cp-2,	0x1.5555555555555p-1, // log1p(0.50000), 1/1.50000
	0x1.a1dc064d5b995p-2,	0x1.54725e6bb82fep-1, // log1p(0.50391), 1/1.50391
	0x1.a484090e5bb0ap-2,	0x1.5390948f40febp-1, // log1p(0.50781), 1/1.50781
	0x1.a72a4966bd9eap-2,	0x1.52aff56a8054bp-1, // log1p(0.51172), 1/1.51172
	0x1.a9cec9a9a084ap-2,	0x1.51d07eae2f815p-1, // log1p(0.51562), 1/1.51562
	0x1.ac718c258b0e4p-2,	0x1.50f22e111c4c5p-1, // log1p(0.51953), 1/1.51953
	0x1.af1293247786bp-2,	0x1.5015015015015p-1, // log1p(0.52344), 1/1.52344
	0x1.b1b1e0ebdfc5bp-2,	0x1.4f38f62dd4c9bp-1, // log1p(0.52734), 1/1.52734
	0x1.b44f77bcc8f63p-2,	0x1.4e5e0a72f0539p-1, // log1p(0.53125), 1/1.53125
	0x1.b6eb59d3cf35ep-2,	0x1.4d843bedc2c4cp-1, // log1p(0.53516), 1/1.53516
	0x1.b9858969310fbp-2,	0x1.4cab88725af6ep-1, // log1p(0.53906), 1/1.53906
	0x1.bc1e08b0dad0ap-2,	0x1.4bd3edda68fe1p-1, // log1p(0.54297), 1/1.54297
	0x1.beb4d9da71b7cp-2,	0x1.4afd6a052bf5bp-1, // log1p(0.54688), 1/1.54688
	0x1.c149ff115f027p-2,	0x1.4a27fad76014ap-1, // log1p(0.55078), 1/1.55078
	0x1.c3dd7a7cdad4dp-2,	0x1.49539e3b2d067p-1, // log1p(0.55469), 1/1.55469
	0x1.c66f4e3ff6ff8p-2,	0x1.4880522014880p-1, // log1p(0.55859), 1/1.55859
	0x1.c8ff7c79a9a22p-2,	0x1.47ae147ae147bp-1, // log1p(0.56250), 1/1.56250
	0x1.cb8e0744d7acap-2,	0x1.46dce34596066p-1, // log1p(0.56641), 1/1.56641
	0x1.ce1af0b85f3ebp-2,	0x1.460cbc7f5cf9ap-1, // log1p(0.57031), 1/1.57031
	0x1.d0a63ae721e64p-2,	0x1.453d9e2c776cap-1, // log1p(0.57422), 1/1.57422
	0x1.d32fe7e00ebd5p-2,	0x1.446f86562d9fbp-1, // log1p(0.57812), 1/1.57812
	0x1.d5b7f9ae2c684p-2,	0x1.43a2730abee4dp-1, // log1p(0.58203), 1/1.58203
	0x1.d83e7258a2f3ep-2,	0x1.42d6625d51f87p-1, // log1p(0.58594), 1/1.58594
	0x1.dac353e2c5954p-2,	0x1.420b5265e5951p-1, // log1p(0.58984), 1/1.58984
	0x1.dd46a04c1c4a1p-2,	0x1.4141414141414p-1, // log1p(0.59375), 1/1.59375
	0x1.dfc859906d5b5p-2,	0x1.40782d10e6566p-1, // log1p(0.59766), 1/1.59766
	0x1.e24881a7c6c26p-2,	0x1.3fb013fb013fbp-1, // log1p(0.60156), 1/1.60156
	0x1.e4c71a8687704p-2,	0x1.3ee8f42a5af07p-1, // log1p(0.60547), 1/1.60547
	0x1.e744261d68788p-2,	0x1.3e22cbce4a902p-1, // log1p(0.60938), 1/1.60938
	0x1.e9bfa659861f5p-2,	0x1.3d5d991aa75c6p-1, // log1p(0.61328), 1/1.61328
	0x1.ec399d2468cc0p-2,	0x1.3c995a47babe7p-1, // log1p(0.61719), 1/1.61719
	0x1.eeb20c640ddf4p-2,	0x1.3bd60d9232955p-1, // log1p(0.62109), 1/1.62109
	0x1.f128f5faf06edp-2,	0x1.3b13b13b13b14p-1, // log1p(0.62500), 1/1.62500
	0x1.f39e5bc811e5cp-2,	0x1.3a524387ac822p-1, // log1p(0.62891), 1/1.62891
	0x1.f6123fa7028acp-2,	0x1.3991c2c187f63p-1, // log1p(0.63281), 1/1.63281
	0x1.f884a36fe9ec2p-2,	0x1.38d22d366088ep-1, // log1p(0.63672), 1/1.63672
	0x1.faf588f78f31fp-2,	0x1.3813813813814p-1, // log1p(0.64062), 1/1.64062
	0x1.fd64f20f61572p-2,	0x1.3755bd1c945eep-1, // log1p(0.64453), 1/1.64453
	0x1.ffd2e0857f498p-2,	0x1.3698df3de0748p-1, // log1p(0.64844), 1/1.64844
	0x1.011fab125ff8ap-1,	0x1.35dce5f9f2af8p-1, // log1p(0.65234), 1/1.65234
	0x1.02552a5a5d0ffp-1,	0x1.3521cfb2b78c1p-1, // log1p(0.65625), 1/1.65625
	0x1.0389eefce633bp-1,	0x1.34679ace01346p-1, // log1p(0.66016), 1/1.66016
	0x1.04bdf9da926d2p-1,	0x1.33ae45b57bcb2p-1, // log1p(0.66406), 1/1.66406
	0x1.05f14bd26459cp-1,	0x1.32f5ced6a1dfap-1, // log1p(0.66797), 1/1.66797
	0x1.0723e5c1cdf40p-1,	0x1.323e34a2b10bfp-1, // log1p(0.67188), 1/1.67188
	0x1.0855c884b450ep-1,	0x1.3187758e9ebb6p-1, // log1p(0.67578), 1/1.67578
	0x1.0986f4f573521p-1,	0x1.30d190130d190p-1, // log1p(0.67969), 1/1.67969
	0x1.0ab76bece14d2p-1,	0x1.301c82ac40260p-1, // log1p(0.68359), 1/1.68359
	0x1.0be72e4252a83p-1,	0x1.2f684bda12f68p-1, // log1p(0.68750), 1/1.68750
	0x1.0d163ccb9d6b8p-1,	0x1.2eb4ea1fed14bp-1, // log1p(0.69141), 1/1.69141
	0x1.0e44985d1cc8cp-1,	0x1.2e025c04b8097p-1, // log1p(0.69531), 1/1.69531
	0x1.0f7241c9b497dp-1,	0x1.2d50a012d50a0p-1, // log1p(0.69922), 1/1.69922
	0x1.109f39e2d4c97p-1,	0x1.2c9fb4d812ca0p-1, // log1p(0.70312), 1/1.70312
	0x1.11cb81787ccf8p-1,	0x1.2bef98e5a3711p-1, // log1p(0.70703), 1/1.70703
	0x1.12f719593efbcp-1,	0x1.2b404ad012b40p-1, // log1p(0.71094), 1/1.71094
	0x1.1422025243d45p-1,	0x1.2a91c92f3c105p-1, // log1p(0.71484), 1/1.71484
	0x1.154c3d2f4d5eap-1,	0x1.29e4129e4129ep-1, // log1p(0.71875), 1/1.71875
	0x1.1675cababa60ep-1,	0x1.293725bb804a5p-1, // log1p(0.72266), 1/1.72266
	0x1.179eabbd899a1p-1,	0x1.288b01288b013p-1, // log1p(0.72656), 1/1.72656
	0x1.18c6e0ff5cf06p-1,	0x1.27dfa38a1ce4dp-1, // log1p(0.73047), 1/1.73047
	0x1.19ee6b467c96fp-1,	0x1.27350b8812735p-1, // log1p(0.73438), 1/1.73438
	0x1.1b154b57da29fp-1,	0x1.268b37cd60127p-1, // log1p(0.73828), 1/1.73828
	0x1.1c3b81f713c25p-1,	0x1.25e22708092f1p-1, // log1p(0.74219), 1/1.74219
	0x1.1d610fe677003p-1,	0x1.2539d7e9177b2p-1, // log1p(0.74609), 1/1.74609
	0x1.1e85f5e7040d0p-1,	0x1.2492492492492p-1, // log1p(0.75000), 1/1.75000
	0x1.1faa34b87094cp-1,	0x1.23eb79717605bp-1, // log1p(0.75391), 1/1.75391
	0x1.20cdcd192ab6ep-1,	0x1.23456789abcdfp-1, // log1p(0.75781), 1/1.75781
	0x1.21f0bfc65beecp-1,	0x1.22a0122a0122ap-1, // log1p(0.76172), 1/1.76172
	0x1.23130d7bebf43p-1,	0x1.21fb78121fb78p-1, // log1p(0.76562), 1/1.76562
	0x1.2434b6f483934p-1,	0x1.21579804855e6p-1, // log1p(0.76953), 1/1.76953
	0x1.2555bce98f7cbp-1,	0x1.20b470c67c0d9p-1, // log1p(0.77344), 1/1.77344
	0x1.26762013430e0p-1,	0x1.2012012012012p-1, // log1p(0.77734), 1/1.77734
	0x1.2795e1289b11bp-1,	0x1.1f7047dc11f70p-1, // log1p(0.78125), 1/1.78125
	0x1.28b500df60783p-1,	0x1.1ecf43c7fb84cp-1, // log1p(0.78516), 1/1.78516
	0x1.29d37fec2b08bp-1,	0x1.1e2ef3b3fb874p-1, // log1p(0.78906), 1/1.78906
	0x1.2af15f02640adp-1,	0x1.1d8f5672e4abdp-1, // log1p(0.79297), 1/1.79297
	0x1.2c0e9ed448e8cp-1,	0x1.1cf06ada2811dp-1, // log1p(0.79688), 1/1.79688
	0x1.2d2b4012edc9ep-1,	0x1.1c522fc1ce059p-1, // log1p(0.80078), 1/1.80078
	0x1.2e47436e40268p-1,	0x1.1bb4a4046ed29p-1, // log1p(0.80469), 1/1.80469
	0x1.2f62a99509546p-1,	0x1.1b17c67f2bae3p-1, // log1p(0.80859), 1/1.80859
	0x1.307d7334f10bep-1,	0x1.1a7b9611a7b96p-1, // log1p(0.81250), 1/1.81250
	0x1.3197a0fa7fe6ap-1,	0x1.19e0119e0119ep-1, // log1p(0.81641), 1/1.81641
	0x1.32b1339121d71p-1,	0x1.19453808ca29cp-1, // log1p(0.82031), 1/1.82031
	0x1.33ca2ba328995p-1,	0x1.18ab083902bdbp-1, // log1p(0.82422), 1/1.82422
	0x1.34e289d9ce1d3p-1,	0x1.1811811811812p-1, // log1p(0.82812), 1/1.82812
	0x1.35fa4edd36ea0p-1,	0x1.1778a191bd684p-1, // log1p(0.83203), 1/1.83203
	0x1.37117b54747b6p-1,	0x1.16e0689427379p-1, // log1p(0.83594), 1/1.83594
	0x1.38280fe58797fp-1,	0x1.1648d50fc3201p-1, // log1p(0.83984), 1/1.83984
	0x1.393e0d3562a1ap-1,	0x1.15b1e5f75270dp-1, // log1p(0.84375), 1/1.84375
	0x1.3a5373e7ebdfap-1,	0x1.151b9a3fdd5c9p-1, // log1p(0.84766), 1/1.84766
	0x1.3b68449fffc23p-1,	0x1.1485f0e0acd3bp-1, // log1p(0.85156), 1/1.85156
	0x1.3c7c7fff73206p-1,	0x1.13f0e8d344724p-1, // log1p(0.85547), 1/1.85547
	0x1.3d9026a7156fbp-1,	0x1.135c81135c811p-1, // log1p(0.85938), 1/1.85938
	0x1.3ea33936b2f5cp-1,	0x1.12c8b89edc0acp-1, // log1p(0.86328), 1/1.86328
	0x1.3fb5b84d16f42p-1,	0x1.12358e75d3033p-1, // log1p(0.86719), 1/1.86719
	0x1.40c7a4880dce9p-1,	0x1.11a3019a74826p-1, // log1p(0.87109), 1/1.87109
	0x1.41d8fe84672aep-1,	0x1.1111111111111p-1, // log1p(0.87500), 1/1.87500
	0x1.42e9c6ddf80bfp-1,	0x1.107fbbe011080p-1, // log1p(0.87891), 1/1.87891
	0x1.43f9fe2f9ce67p-1,	0x1.0fef010fef011p-1, // log1p(0.88281), 1/1.88281
	0x1.4509a5133bb0ap-1,	0x1.0f5edfab325a2p-1, // log1p(0.88672), 1/1.88672
	0x1.4618bc21c5ec2p-1,	0x1.0ecf56be69c90p-1, // log1p(0.89062), 1/1.89062
	0x1.472743f33aaadp-1,	0x1.0e40655826011p-1, // log1p(0.89453), 1/1.89453
	0x1.48353d1ea88dfp-1,	0x1.0db20a88f4696p-1, // log1p(0.89844), 1/1.89844
	0x1.4942a83a2fc07p-1,	0x1.0d24456359e3ap-1, // log1p(0.90234), 1/1.90234
	0x1.4a4f85db03ebbp-1,	0x1.0c9714fbcda3bp-1, // log1p(0.90625), 1/1.90625
	0x1.4b5bd6956e274p-1,	0x1.0c0a7868b4171p-1, // log1p(0.91016), 1/1.91016
	0x1.4c679afccee3ap-1,	0x1.0b7e6ec259dc8p-1, // log1p(0.91406), 1/1.91406
	0x1.4d72d3a39fd00p-1,	0x1.0af2f722eecb5p-1, // log1p(0.91797), 1/1.91797
	0x1.4e7d811b75bb1p-1,	0x1.0a6810a6810a7p-1, // log1p(0.92188), 1/1.92188
	0x1.4f87a3f5026e9p-1,	0x1.09ddba6af8360p-1, // log1p(0.92578), 1/1.92578
	0x1.50913cc01686bp-1,	0x1.0953f39010954p-1, // log1p(0.92969), 1/1.92969
	0x1.519a4c0ba3446p-1,	0x1.08cabb37565e2p-1, // log1p(0.93359), 1/1.93359
	0x1.52a2d265bc5abp-1,	0x1.0842108421084p-1, // log1p(0.93750), 1/1.93750
	0x1.53aad05b99b7dp-1,	0x1.07b9f29b8eae2p-1, // log1p(0.94141), 1/1.94141
	0x1.54b2467999498p-1,	0x1.073260a47f7c6p-1, // log1p(0.94531), 1/1.94531
	0x1.55b9354b40bcdp-1,	0x1.06ab59c7912fbp-1, // log1p(0.94922), 1/1.94922
	0x1.56bf9d5b3f399p-1,	0x1.0624dd2f1a9fcp-1, // log1p(0.95312), 1/1.95312
	0x1.57c57f336f191p-1,	0x1.059eea0727586p-1, // log1p(0.95703), 1/1.95703
	0x1.58cadb5cd7989p-1,	0x1.05197f7d73404p-1, // log1p(0.96094), 1/1.96094
	0x1.59cfb25fae87ep-1,	0x1.04949cc1664c5p-1, // log1p(0.96484), 1/1.96484
	0x1.5ad404c359f2dp-1,	0x1.0410410410410p-1, // log1p(0.96875), 1/1.96875
	0x1.5bd7d30e71c73p-1,	0x1.038c6b78247fcp-1, // log1p(0.97266), 1/1.97266
	0x1.5cdb1dc6c1765p-1,	0x1.03091b51f5e1ap-1, // log1p(0.97656), 1/1.97656
	0x1.5ddde57149923p-1,	0x1.02864fc7729e9p-1, // log1p(0.98047), 1/1.98047
	0x1.5ee02a9241675p-1,	0x1.0204081020408p-1, // log1p(0.98438), 1/1.98438
	0x1.5fe1edad18919p-1,	0x1.0182436517a37p-1, // log1p(0.98828), 1/1.98828
	0x1.60e32f44788d9p-1,	0x1.0101010101010p-1, // log1p(0.99219), 1/1.99219
	0x1.61e3efda46467p-1,	0x1.0080402010080p-1, // log1p(0.99609), 1/1.99609
};

static const double clo[7] = { 
  1.00000000018509802868984798524864,
 -0.0000000705300540307137694609201881,
 -0.166662289795787088465191447717750,
 -0.0001009985577626543378037277742784,
  0.0760885241995209395169551945986484,
 -0.0057418099913773300398902151197332,
 -0.0318623549918317164371285018421947
};

static const double chi[7] = {
   -0.2092095511020084042814435719e-9, // c0
//	0.69314718035073575, // ln(2) + c0
	0.796987806442792162822814040e-7,
	0.249995055353008078097157113288045,
	0.1140693486830116235762408773138e-3,
   -0.949789978387560925988034919286237e-1,
	0.64800804221710688992278779263031e-2,
	0.376679982018344627842877650291083e-1
};

static const double pmid[7] = {
	0.892178018634928816893907e-8,
	0.8283416797030938632023814241682e-2,
	0.105956359495511686253578117718131e-1,
	0.13336917020208409606139419601435e-1,
	0.80516292348669011567734851341477e-2,
	0.324813666331657452737050865381446e-2,
	0.173613019410081384391335842765437e-3
};

static const double qmid[7] = {
	0.8283568988444060594605115886008e-2,
	0.10594563504975844884549409575489e-1,
	0.147214042538410801238839453141831e-1,
	0.9810773425787440232737179459873e-2,
	0.507824407633819986300807796358553e-2,
	0.105032848007298650571408488309691e-2,
	0.307415909456782412162676745474410e-4
};
	
static volatile const float Infinity = INFINITY;
static const double log_2 = 0x1.62e42fefa39efp-1;		// ln(2)

float asinhf( float x )
{
	if( x != x )	return x + x;
	double fabsx = __builtin_fabs( x );
	
	double result;
	int i;
	
	if (fabsx < 0x1.0p-13) {
		result = fabsx * 0x1.fffffffffffffp-1;
	}
	else if (fabsx <= 0x1.0p-2) {
		i = 6;
		result = clo[6]*fabsx;	
		do {
			result = (clo[--i] + result)*fabsx;
		} while (i);
	}
	
	else if (fabsx <= 0x1.0p2) {
		i = 6;
		double p = pmid[6];
		double q = qmid[6];
		do {
			p = p * fabsx + pmid[--i];
			q = q * fabsx + qmid[i];
		} while (i);
		result = p/q;
	}
	
	else if (fabsx < Infinity) {
		// for x > 4, we us an approximation of the form ln(2x) + P(x)
		double x_inverse = 1.0/(double)fabsx;
		
		// compute log(2x)
		union { float f; uint32_t u; } u = { __builtin_fabsf(x) };
		
		double log2x = log_2*(double)((u.u >> 23) - 126);
		uint32_t index = (u.u >> 11) & 0xff0;
		u.u &= 0x7fffU;
		u.u |= 0x3f800000U;
		
		const double *tablep = (const double*)((void*)logf_table + index);
		double r = ((double)u.f - 1.0)*tablep[1];
		log2x += tablep[0];
		log2x += (0.333333333333333333*r - 0.5)*(r*r) + r;
		
		i = 6;
		result = chi[6];
		do {
			result = result * x_inverse + chi[--i];
		} while (i);
		
		result += log2x;
	}
	
	else result = fabsx;
	
	if( x < 0 )
		result = -result;
	
	return (float)result;
}