a68g-math.h
1 //! @file a68g-math.h
2 //! @author J. Marcel van der Veer
3 //!
4 //! @section Copyright
5 //!
6 //! This file is part of Algol68G - an Algol 68 compiler-interpreter.
7 //! Copyright 2001-2023 J. Marcel van der Veer [algol68g@xs4all.nl].
8 //!
9 //! @section License
10 //!
11 //! This program is free software; you can redistribute it and/or modify it
12 //! under the terms of the GNU General Public License as published by the
13 //! Free Software Foundation; either version 3 of the License, or
14 //! (at your option) any later version.
15 //!
16 //! This program is distributed in the hope that it will be useful, but
17 //! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
18 //! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
19 //! more details. You should have received a copy of the GNU General Public
20 //! License along with this program. If not, see [http://www.gnu.org/licenses/].
21
22 static const REAL_T factable[A68_MAX_FAC + 1] = {
23 1.000000000000000000000e0, // 0
24 1.000000000000000000000e0, // 1
25 2.000000000000000000000e0, // 2
26 6.000000000000000000000e0, // 3
27 2.400000000000000000000e1, // 4
28 1.200000000000000000000e2, // 5
29 7.200000000000000000000e2, // 6
30 5.040000000000000000000e3, // 7
31 4.032000000000000000000e4, // 8
32 3.628800000000000000000e5, // 9
33 3.628800000000000000000e6, // 10
34 3.991680000000000000000e7, // 11
35 4.790016000000000000000e8, // 12
36 6.227020800000000000000e9, // 13
37 8.717829120000000000000e10, // 14
38 1.307674368000000000000e12, // 15
39 2.092278988800000000000e13, // 16
40 3.556874280960000000000e14, // 17
41 6.402373705728000000000e15, // 18
42 1.216451004088320000000e17, // 19
43 2.432902008176640000000e18, // 20
44 5.109094217170944000000e19, // 21
45 1.124000727777607680000e21, // 22
46 2.585201673888497664000e22, // 23
47 6.204484017332394393600e23, // 24
48 1.551121004333098598400e25, // 25
49 4.032914611266056355840e26, // 26
50 1.088886945041835216077e28, // 27
51 3.048883446117138605015e29, // 28
52 8.841761993739701954544e30, // 29
53 2.652528598121910586363e32, // 30
54 8.222838654177922817726e33, // 31
55 2.631308369336935301672e35, // 32
56 8.683317618811886495518e36, // 33
57 2.952327990396041408476e38, // 34
58 1.033314796638614492967e40, // 35
59 3.719933267899012174680e41, // 36
60 1.376375309122634504632e43, // 37
61 5.230226174666011117600e44, // 38
62 2.039788208119744335864e46, // 39
63 8.159152832478977343456e47, // 40
64 3.345252661316380710817e49, // 41
65 1.405006117752879898543e51, // 42
66 6.041526306337383563736e52, // 43
67 2.658271574788448768044e54, // 44
68 1.196222208654801945620e56, // 45
69 5.502622159812088949850e57, // 46
70 2.586232415111681806430e59, // 47
71 1.241391559253607267086e61, // 48
72 6.082818640342675608723e62, // 49
73 3.041409320171337804361e64, // 50
74 1.551118753287382280224e66, // 51
75 8.065817517094387857166e67, // 52
76 4.274883284060025564298e69, // 53
77 2.308436973392413804721e71, // 54
78 1.269640335365827592597e73, // 55
79 7.109985878048634518540e74, // 56
80 4.052691950487721675568e76, // 57
81 2.350561331282878571829e78, // 58
82 1.386831185456898357379e80, // 59
83 8.320987112741390144276e81, // 60
84 5.075802138772247988009e83, // 61
85 3.146997326038793752565e85, // 62
86 1.982608315404440064116e87, // 63
87 1.268869321858841641034e89, // 64
88 8.247650592082470666723e90, // 65
89 5.443449390774430640037e92, // 66
90 3.647111091818868528825e94, // 67
91 2.480035542436830599601e96, // 68
92 1.711224524281413113725e98, // 69
93 1.197857166996989179607e100, // 70
94 8.504785885678623175212e101, // 71
95 6.123445837688608686152e103, // 72
96 4.470115461512684340891e105, // 73
97 3.307885441519386412260e107, // 74
98 2.480914081139539809195e109, // 75
99 1.885494701666050254988e111, // 76
100 1.451830920282858696341e113, // 77
101 1.132428117820629783146e115, // 78
102 8.946182130782975286851e116, // 79
103 7.156945704626380229481e118, // 80
104 5.797126020747367985880e120, // 81
105 4.753643337012841748421e122, // 82
106 3.945523969720658651190e124, // 83
107 3.314240134565353266999e126, // 84
108 2.817104114380550276949e128, // 85
109 2.422709538367273238177e130, // 86
110 2.107757298379527717214e132, // 87
111 1.854826422573984391148e134, // 88
112 1.650795516090846108122e136, // 89
113 1.485715964481761497310e138, // 90
114 1.352001527678402962552e140, // 91
115 1.243841405464130725548e142, // 92
116 1.156772507081641574759e144, // 93
117 1.087366156656743080274e146, // 94
118 1.032997848823905926260e148, // 95
119 9.916779348709496892096e149, // 96
120 9.619275968248211985333e151, // 97
121 9.426890448883247745626e153, // 98
122 9.332621544394415268170e155, // 99
123 9.332621544394415268170e157, // 100
124 9.425947759838359420852e159, // 101
125 9.614466715035126609269e161, // 102
126 9.902900716486180407547e163, // 103
127 1.029901674514562762385e166, // 104
128 1.081396758240290900504e168, // 105
129 1.146280563734708354534e170, // 106
130 1.226520203196137939352e172, // 107
131 1.324641819451828974500e174, // 108
132 1.443859583202493582205e176, // 109
133 1.588245541522742940425e178, // 110
134 1.762952551090244663872e180, // 111
135 1.974506857221074023537e182, // 112
136 2.231192748659813646597e184, // 113
137 2.543559733472187557120e186, // 114
138 2.925093693493015690688e188, // 115
139 3.393108684451898201198e190, // 116
140 3.969937160808720895402e192, // 117
141 4.684525849754290656574e194, // 118
142 5.574585761207605881323e196, // 119
143 6.689502913449127057588e198, // 120
144 8.094298525273443739682e200, // 121
145 9.875044200833601362412e202, // 122
146 1.214630436702532967577e205, // 123
147 1.506141741511140879795e207, // 124
148 1.882677176888926099744e209, // 125
149 2.372173242880046885677e211, // 126
150 3.012660018457659544810e213, // 127
151 3.856204823625804217357e215, // 128
152 4.974504222477287440390e217, // 129
153 6.466855489220473672507e219, // 130
154 8.471580690878820510985e221, // 131
155 1.118248651196004307450e224, // 132
156 1.487270706090685728908e226, // 133
157 1.992942746161518876737e228, // 134
158 2.690472707318050483595e230, // 135
159 3.659042881952548657690e232, // 136
160 5.012888748274991661035e234, // 137
161 6.917786472619488492228e236, // 138
162 9.615723196941089004197e238, // 139
163 1.346201247571752460588e241, // 140
164 1.898143759076170969429e243, // 141
165 2.695364137888162776589e245, // 142
166 3.854370717180072770522e247, // 143
167 5.550293832739304789551e249, // 144
168 8.047926057471991944849e251, // 145
169 1.174997204390910823948e254, // 146
170 1.727245890454638911203e256, // 147
171 2.556323917872865588581e258, // 148
172 3.808922637630569726986e260, // 149
173 5.713383956445854590479e262, // 150
174 8.627209774233240431623e264, // 151
175 1.311335885683452545607e267, // 152
176 2.006343905095682394778e269, // 153
177 3.089769613847350887959e271, // 154
178 4.789142901463393876336e273, // 155
179 7.471062926282894447084e275, // 156
180 1.172956879426414428192e278, // 157
181 1.853271869493734796544e280, // 158
182 2.946702272495038326504e282, // 159
183 4.714723635992061322407e284, // 160
184 7.590705053947218729075e286, // 161
185 1.229694218739449434110e289, // 162
186 2.004401576545302577600e291, // 163
187 3.287218585534296227263e293, // 164
188 5.423910666131588774984e295, // 165
189 9.003691705778437366474e297, // 166
190 1.503616514864999040201e300, // 167
191 2.526075744973198387538e302, // 168
192 4.269068009004705274939e304, // 169
193 7.257415615307998967397e306 // 170
194 };
195
196 static const REAL_T ln_factable[A68_MAX_FAC + 1] = {
197 0.000000000000000000000e0, // 0
198 0.000000000000000000000e0, // 1
199 6.931471805599453094172e-1, // 2
200 1.791759469228055000812e0, // 3
201 3.178053830347945619647e0, // 4
202 4.787491742782045994248e0, // 5
203 6.579251212010100995060e0, // 6
204 8.525161361065414300166e0, // 7
205 1.060460290274525022842e1, // 8
206 1.280182748008146961121e1, // 9
207 1.510441257307551529523e1, // 10
208 1.750230784587388583929e1, // 11
209 1.998721449566188614952e1, // 12
210 2.255216385312342288557e1, // 13
211 2.519122118273868150009e1, // 14
212 2.789927138384089156609e1, // 15
213 3.067186010608067280376e1, // 16
214 3.350507345013688888401e1, // 17
215 3.639544520803305357622e1, // 18
216 3.933988418719949403622e1, // 19
217 4.233561646075348502966e1, // 20
218 4.538013889847690802616e1, // 21
219 4.847118135183522387964e1, // 22
220 5.160667556776437357045e1, // 23
221 5.478472939811231919009e1, // 24
222 5.800360522298051993929e1, // 25
223 6.126170176100200198477e1, // 26
224 6.455753862700633105895e1, // 27
225 6.788974313718153498289e1, // 28
226 7.125703896716800901007e1, // 29
227 7.465823634883016438549e1, // 30
228 7.809222355331531063142e1, // 31
229 8.155795945611503717850e1, // 32
230 8.505446701758151741396e1, // 33
231 8.858082754219767880363e1, // 34
232 9.213617560368709248333e1, // 35
233 9.571969454214320248496e1, // 36
234 9.933061245478742692933e1, // 37
235 1.029681986145138126988e2, // 38
236 1.066317602606434591262e2, // 39
237 1.103206397147573954291e2, // 40
238 1.140342117814617032329e2, // 41
239 1.177718813997450715388e2, // 42
240 1.215330815154386339623e2, // 43
241 1.253172711493568951252e2, // 44
242 1.291239336391272148826e2, // 45
243 1.329525750356163098828e2, // 46
244 1.368027226373263684696e2, // 47
245 1.406739236482342593987e2, // 48
246 1.445657439463448860089e2, // 49
247 1.484777669517730320675e2, // 50
248 1.524095925844973578392e2, // 51
249 1.563608363030787851941e2, // 52
250 1.603311282166309070282e2, // 53
251 1.643201122631951814118e2, // 54
252 1.683274454484276523305e2, // 55
253 1.723527971391628015638e2, // 56
254 1.763958484069973517152e2, // 57
255 1.804562914175437710518e2, // 58
256 1.845338288614494905025e2, // 59
257 1.886281734236715911873e2, // 60
258 1.927390472878449024360e2, // 61
259 1.968661816728899939914e2, // 62
260 2.010093163992815266793e2, // 63
261 2.051681994826411985358e2, // 64
262 2.093425867525368356464e2, // 65
263 2.135322414945632611913e2, // 66
264 2.177369341139542272510e2, // 67
265 2.219564418191303339501e2, // 68
266 2.261905483237275933323e2, // 69
267 2.304390435657769523214e2, // 70
268 2.347017234428182677427e2, // 71
269 2.389783895618343230538e2, // 72
270 2.432688490029827141829e2, // 73
271 2.475729140961868839366e2, // 74
272 2.518904022097231943772e2, // 75
273 2.562211355500095254561e2, // 76
274 2.605649409718632093053e2, // 77
275 2.649216497985528010421e2, // 78
276 2.692910976510198225363e2, // 79
277 2.736731242856937041486e2, // 80
278 2.780675734403661429141e2, // 81
279 2.824742926876303960274e2, // 82
280 2.868931332954269939509e2, // 83
281 2.913239500942703075662e2, // 84
282 2.957666013507606240211e2, // 85
283 3.002209486470141317540e2, // 86
284 3.046868567656687154726e2, // 87
285 3.091641935801469219449e2, // 88
286 3.136528299498790617832e2, // 89
287 3.181526396202093268500e2, // 90
288 3.226634991267261768912e2, // 91
289 3.271852877037752172008e2, // 92
290 3.317178871969284731381e2, // 93
291 3.362611819791984770344e2, // 94
292 3.408150588707990178690e2, // 95
293 3.453794070622668541074e2, // 96
294 3.499541180407702369296e2, // 97
295 3.545390855194408088492e2, // 98
296 3.591342053695753987760e2, // 99
297 3.637393755555634901441e2, // 100
298 3.683544960724047495950e2, // 101
299 3.729794688856890206760e2, // 102
300 3.776141978739186564468e2, // 103
301 3.822585887730600291111e2, // 104
302 3.869125491232175524822e2, // 105
303 3.915759882173296196258e2, // 106
304 3.962488170517915257991e2, // 107
305 4.009309482789157454921e2, // 108
306 4.056222961611448891925e2, // 109
307 4.103227765269373054205e2, // 110
308 4.150323067282496395563e2, // 111
309 4.197508055995447340991e2, // 112
310 4.244781934182570746677e2, // 113
311 4.292143918666515701285e2, // 114
312 4.339593239950148201939e2, // 115
313 4.387129141861211848399e2, // 116
314 4.434750881209189409588e2, // 117
315 4.482457727453846057188e2, // 118
316 4.530248962384961351041e2, // 119
317 4.578123879812781810984e2, // 120
318 4.626081785268749221865e2, // 121
319 4.674121995716081787447e2, // 122
320 4.722243839269805962399e2, // 123
321 4.770446654925856331047e2, // 124
322 4.818729792298879342285e2, // 125
323 4.867092611368394122258e2, // 126
324 4.915534482232980034989e2, // 127
325 4.964054784872176206648e2, // 128
326 5.012652908915792927797e2, // 129
327 5.061328253420348751997e2, // 130
328 5.110080226652360267439e2, // 131
329 5.158908245878223975982e2, // 132
330 5.207811737160441513633e2, // 133
331 5.256790135159950627324e2, // 134
332 5.305842882944334921812e2, // 135
333 5.354969431801695441897e2, // 136
334 5.404169241059976691050e2, // 137
335 5.453441777911548737966e2, // 138
336 5.502786517242855655538e2, // 139
337 5.552202941468948698523e2, // 140
338 5.601690540372730381305e2, // 141
339 5.651248810948742988613e2, // 142
340 5.700877257251342061414e2, // 143
341 5.750575390247102067619e2, // 144
342 5.800342727671307811636e2, // 145
343 5.850178793888391176022e2, // 146
344 5.900083119756178539038e2, // 147
345 5.950055242493819689670e2, // 148
346 6.000094705553274281080e2, // 149
347 6.050201058494236838580e2, // 150
348 6.100373856862386081868e2, // 151
349 6.150612662070848845750e2, // 152
350 6.200917041284773200381e2, // 153
351 6.251286567308909491967e2, // 154
352 6.301720818478101958172e2, // 155
353 6.352219378550597328635e2, // 156
354 6.402781836604080409209e2, // 157
355 6.453407786934350077245e2, // 158
356 6.504096828956552392500e2, // 159
357 6.554848567108890661717e2, // 160
358 6.605662610758735291676e2, // 161
359 6.656538574111059132426e2, // 162
360 6.707476076119126755767e2, // 163
361 6.758474740397368739994e2, // 164
362 6.809534195136374546094e2, // 165
363 6.860654073019939978423e2, // 166
364 6.911834011144107529496e2, // 167
365 6.963073650938140118743e2, // 168
366 7.014372638087370853465e2, // 169
367 7.065730622457873471107e2 // 170
368 };
369
370 #define N_c_inverfc 34
371
372 static const REAL_T c_inverfc[N_c_inverfc] =
373 {
374 0.91646139826896400000,
375 0.48882664027310800000,
376 0.23172920032340500000,
377 0.12461045461371200000,
378 -0.07288467655856750000,
379 0.26999930867002900000,
380 0.15068904736022300000,
381 0.11606502534161400000,
382 0.49999930343979000000,
383 3.97886080735226000000,
384 0.00112648096188977922,
385 1.05739299623423047e-4,
386 0.00351287146129100025,
387 7.71708358954120939e-4,
388 0.00685649426074558612,
389 0.00339721910367775861,
390 0.01127491693325048700,
391 0.01185981170477711040,
392 0.01429619886978980180,
393 0.03464942077890999220,
394 0.00220995927012179067,
395 0.07434243572417848610,
396 0.10587217794159548800,
397 0.01472979383314851210,
398 0.31684763852013594400,
399 0.71365763586873036400,
400 1.05375024970847138000,
401 1.21448730779995237000,
402 1.16374581931560831000,
403 0.95646497474479900600,
404 0.68626594827409781600,
405 0.43439749233143011500,
406 0.24404451059319093500,
407 0.12078223763524522200
408 };
409
410 #define N_ln1p 21
411
412 static const REAL_T c_ln1p[N_ln1p + 1] =
413 {
414 N_ln1p,
415 1.8657327910677296608121390705e-18,
416 -1.3492637457521938883731579510e-17,
417 9.7089758328248469219003866867e-17,
418 -7.0722150011433276578323272272e-16,
419 5.1107345870861673561462339876e-15,
420 -3.7581977830387938294437434651e-14,
421 2.7291231220549214896095654769e-13,
422 -2.0328515972462118942821556033e-12,
423 1.4844576692270934446023686322e-11,
424 -1.1260499376492049411710290413e-10,
425 8.2751976628812389601561347296e-10,
426 -6.4501969776090319441714445454e-09,
427 4.7743678729400456026672697926e-08,
428 -3.8873813517057343800270917900e-07,
429 2.9004512660400621301999384544e-06,
430 -0.00002553258886105542567601400,
431 0.00019211375164056698287947962,
432 -0.00200215904941415466274422081,
433 0.01517767255690553732382488171,
434 -0.28565398551049742084877469679,
435 2.16647910664395270521272590407
436 };
437