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