Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wine-mirror
GitHub Repository: wine-mirror/wine
Path: blob/master/libs/musl/src/math/exp_data.c
4397 views
1
/*
2
* Shared data between exp, exp2 and pow.
3
*
4
* Copyright (c) 2018, Arm Limited.
5
* SPDX-License-Identifier: MIT
6
*/
7
8
#include "exp_data.h"
9
10
#define N (1 << EXP_TABLE_BITS)
11
12
const struct exp_data __exp_data = {
13
// N/ln2
14
.invln2N = 0x1.71547652b82fep0 * N,
15
// -ln2/N
16
.negln2hiN = -0x1.62e42fefa0000p-8,
17
.negln2loN = -0x1.cf79abc9e3b3ap-47,
18
// Used for rounding when !TOINT_INTRINSICS
19
#if EXP_USE_TOINT_NARROW
20
.shift = 0x1800000000.8p0,
21
#else
22
.shift = 0x1.8p52,
23
#endif
24
// exp polynomial coefficients.
25
.poly = {
26
// abs error: 1.555*2^-66
27
// ulp error: 0.509 (0.511 without fma)
28
// if |x| < ln2/256+eps
29
// abs error if |x| < ln2/256+0x1p-15: 1.09*2^-65
30
// abs error if |x| < ln2/128: 1.7145*2^-56
31
0x1.ffffffffffdbdp-2,
32
0x1.555555555543cp-3,
33
0x1.55555cf172b91p-5,
34
0x1.1111167a4d017p-7,
35
},
36
.exp2_shift = 0x1.8p52 / N,
37
// exp2 polynomial coefficients.
38
.exp2_poly = {
39
// abs error: 1.2195*2^-65
40
// ulp error: 0.507 (0.511 without fma)
41
// if |x| < 1/256
42
// abs error if |x| < 1/128: 1.9941*2^-56
43
0x1.62e42fefa39efp-1,
44
0x1.ebfbdff82c424p-3,
45
0x1.c6b08d70cf4b5p-5,
46
0x1.3b2abd24650ccp-7,
47
0x1.5d7e09b4e3a84p-10,
48
},
49
// 2^(k/N) ~= H[k]*(1 + T[k]) for int k in [0,N)
50
// tab[2*k] = asuint64(T[k])
51
// tab[2*k+1] = asuint64(H[k]) - (k << 52)/N
52
.tab = {
53
0x0, 0x3ff0000000000000,
54
0x3c9b3b4f1a88bf6e, 0x3feff63da9fb3335,
55
0xbc7160139cd8dc5d, 0x3fefec9a3e778061,
56
0xbc905e7a108766d1, 0x3fefe315e86e7f85,
57
0x3c8cd2523567f613, 0x3fefd9b0d3158574,
58
0xbc8bce8023f98efa, 0x3fefd06b29ddf6de,
59
0x3c60f74e61e6c861, 0x3fefc74518759bc8,
60
0x3c90a3e45b33d399, 0x3fefbe3ecac6f383,
61
0x3c979aa65d837b6d, 0x3fefb5586cf9890f,
62
0x3c8eb51a92fdeffc, 0x3fefac922b7247f7,
63
0x3c3ebe3d702f9cd1, 0x3fefa3ec32d3d1a2,
64
0xbc6a033489906e0b, 0x3fef9b66affed31b,
65
0xbc9556522a2fbd0e, 0x3fef9301d0125b51,
66
0xbc5080ef8c4eea55, 0x3fef8abdc06c31cc,
67
0xbc91c923b9d5f416, 0x3fef829aaea92de0,
68
0x3c80d3e3e95c55af, 0x3fef7a98c8a58e51,
69
0xbc801b15eaa59348, 0x3fef72b83c7d517b,
70
0xbc8f1ff055de323d, 0x3fef6af9388c8dea,
71
0x3c8b898c3f1353bf, 0x3fef635beb6fcb75,
72
0xbc96d99c7611eb26, 0x3fef5be084045cd4,
73
0x3c9aecf73e3a2f60, 0x3fef54873168b9aa,
74
0xbc8fe782cb86389d, 0x3fef4d5022fcd91d,
75
0x3c8a6f4144a6c38d, 0x3fef463b88628cd6,
76
0x3c807a05b0e4047d, 0x3fef3f49917ddc96,
77
0x3c968efde3a8a894, 0x3fef387a6e756238,
78
0x3c875e18f274487d, 0x3fef31ce4fb2a63f,
79
0x3c80472b981fe7f2, 0x3fef2b4565e27cdd,
80
0xbc96b87b3f71085e, 0x3fef24dfe1f56381,
81
0x3c82f7e16d09ab31, 0x3fef1e9df51fdee1,
82
0xbc3d219b1a6fbffa, 0x3fef187fd0dad990,
83
0x3c8b3782720c0ab4, 0x3fef1285a6e4030b,
84
0x3c6e149289cecb8f, 0x3fef0cafa93e2f56,
85
0x3c834d754db0abb6, 0x3fef06fe0a31b715,
86
0x3c864201e2ac744c, 0x3fef0170fc4cd831,
87
0x3c8fdd395dd3f84a, 0x3feefc08b26416ff,
88
0xbc86a3803b8e5b04, 0x3feef6c55f929ff1,
89
0xbc924aedcc4b5068, 0x3feef1a7373aa9cb,
90
0xbc9907f81b512d8e, 0x3feeecae6d05d866,
91
0xbc71d1e83e9436d2, 0x3feee7db34e59ff7,
92
0xbc991919b3ce1b15, 0x3feee32dc313a8e5,
93
0x3c859f48a72a4c6d, 0x3feedea64c123422,
94
0xbc9312607a28698a, 0x3feeda4504ac801c,
95
0xbc58a78f4817895b, 0x3feed60a21f72e2a,
96
0xbc7c2c9b67499a1b, 0x3feed1f5d950a897,
97
0x3c4363ed60c2ac11, 0x3feece086061892d,
98
0x3c9666093b0664ef, 0x3feeca41ed1d0057,
99
0x3c6ecce1daa10379, 0x3feec6a2b5c13cd0,
100
0x3c93ff8e3f0f1230, 0x3feec32af0d7d3de,
101
0x3c7690cebb7aafb0, 0x3feebfdad5362a27,
102
0x3c931dbdeb54e077, 0x3feebcb299fddd0d,
103
0xbc8f94340071a38e, 0x3feeb9b2769d2ca7,
104
0xbc87deccdc93a349, 0x3feeb6daa2cf6642,
105
0xbc78dec6bd0f385f, 0x3feeb42b569d4f82,
106
0xbc861246ec7b5cf6, 0x3feeb1a4ca5d920f,
107
0x3c93350518fdd78e, 0x3feeaf4736b527da,
108
0x3c7b98b72f8a9b05, 0x3feead12d497c7fd,
109
0x3c9063e1e21c5409, 0x3feeab07dd485429,
110
0x3c34c7855019c6ea, 0x3feea9268a5946b7,
111
0x3c9432e62b64c035, 0x3feea76f15ad2148,
112
0xbc8ce44a6199769f, 0x3feea5e1b976dc09,
113
0xbc8c33c53bef4da8, 0x3feea47eb03a5585,
114
0xbc845378892be9ae, 0x3feea34634ccc320,
115
0xbc93cedd78565858, 0x3feea23882552225,
116
0x3c5710aa807e1964, 0x3feea155d44ca973,
117
0xbc93b3efbf5e2228, 0x3feea09e667f3bcd,
118
0xbc6a12ad8734b982, 0x3feea012750bdabf,
119
0xbc6367efb86da9ee, 0x3fee9fb23c651a2f,
120
0xbc80dc3d54e08851, 0x3fee9f7df9519484,
121
0xbc781f647e5a3ecf, 0x3fee9f75e8ec5f74,
122
0xbc86ee4ac08b7db0, 0x3fee9f9a48a58174,
123
0xbc8619321e55e68a, 0x3fee9feb564267c9,
124
0x3c909ccb5e09d4d3, 0x3feea0694fde5d3f,
125
0xbc7b32dcb94da51d, 0x3feea11473eb0187,
126
0x3c94ecfd5467c06b, 0x3feea1ed0130c132,
127
0x3c65ebe1abd66c55, 0x3feea2f336cf4e62,
128
0xbc88a1c52fb3cf42, 0x3feea427543e1a12,
129
0xbc9369b6f13b3734, 0x3feea589994cce13,
130
0xbc805e843a19ff1e, 0x3feea71a4623c7ad,
131
0xbc94d450d872576e, 0x3feea8d99b4492ed,
132
0x3c90ad675b0e8a00, 0x3feeaac7d98a6699,
133
0x3c8db72fc1f0eab4, 0x3feeace5422aa0db,
134
0xbc65b6609cc5e7ff, 0x3feeaf3216b5448c,
135
0x3c7bf68359f35f44, 0x3feeb1ae99157736,
136
0xbc93091fa71e3d83, 0x3feeb45b0b91ffc6,
137
0xbc5da9b88b6c1e29, 0x3feeb737b0cdc5e5,
138
0xbc6c23f97c90b959, 0x3feeba44cbc8520f,
139
0xbc92434322f4f9aa, 0x3feebd829fde4e50,
140
0xbc85ca6cd7668e4b, 0x3feec0f170ca07ba,
141
0x3c71affc2b91ce27, 0x3feec49182a3f090,
142
0x3c6dd235e10a73bb, 0x3feec86319e32323,
143
0xbc87c50422622263, 0x3feecc667b5de565,
144
0x3c8b1c86e3e231d5, 0x3feed09bec4a2d33,
145
0xbc91bbd1d3bcbb15, 0x3feed503b23e255d,
146
0x3c90cc319cee31d2, 0x3feed99e1330b358,
147
0x3c8469846e735ab3, 0x3feede6b5579fdbf,
148
0xbc82dfcd978e9db4, 0x3feee36bbfd3f37a,
149
0x3c8c1a7792cb3387, 0x3feee89f995ad3ad,
150
0xbc907b8f4ad1d9fa, 0x3feeee07298db666,
151
0xbc55c3d956dcaeba, 0x3feef3a2b84f15fb,
152
0xbc90a40e3da6f640, 0x3feef9728de5593a,
153
0xbc68d6f438ad9334, 0x3feeff76f2fb5e47,
154
0xbc91eee26b588a35, 0x3fef05b030a1064a,
155
0x3c74ffd70a5fddcd, 0x3fef0c1e904bc1d2,
156
0xbc91bdfbfa9298ac, 0x3fef12c25bd71e09,
157
0x3c736eae30af0cb3, 0x3fef199bdd85529c,
158
0x3c8ee3325c9ffd94, 0x3fef20ab5fffd07a,
159
0x3c84e08fd10959ac, 0x3fef27f12e57d14b,
160
0x3c63cdaf384e1a67, 0x3fef2f6d9406e7b5,
161
0x3c676b2c6c921968, 0x3fef3720dcef9069,
162
0xbc808a1883ccb5d2, 0x3fef3f0b555dc3fa,
163
0xbc8fad5d3ffffa6f, 0x3fef472d4a07897c,
164
0xbc900dae3875a949, 0x3fef4f87080d89f2,
165
0x3c74a385a63d07a7, 0x3fef5818dcfba487,
166
0xbc82919e2040220f, 0x3fef60e316c98398,
167
0x3c8e5a50d5c192ac, 0x3fef69e603db3285,
168
0x3c843a59ac016b4b, 0x3fef7321f301b460,
169
0xbc82d52107b43e1f, 0x3fef7c97337b9b5f,
170
0xbc892ab93b470dc9, 0x3fef864614f5a129,
171
0x3c74b604603a88d3, 0x3fef902ee78b3ff6,
172
0x3c83c5ec519d7271, 0x3fef9a51fbc74c83,
173
0xbc8ff7128fd391f0, 0x3fefa4afa2a490da,
174
0xbc8dae98e223747d, 0x3fefaf482d8e67f1,
175
0x3c8ec3bc41aa2008, 0x3fefba1bee615a27,
176
0x3c842b94c3a9eb32, 0x3fefc52b376bba97,
177
0x3c8a64a931d185ee, 0x3fefd0765b6e4540,
178
0xbc8e37bae43be3ed, 0x3fefdbfdad9cbe14,
179
0x3c77893b4d91cd9d, 0x3fefe7c1819e90d8,
180
0x3c5305c14160cc89, 0x3feff3c22b8f71f1,
181
},
182
};
183
184