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