/******************************************************************************* Ziggurat tables for sampling from a normal distribution ------------------------------------------------------- These constants are obtained by the procedure described in: (a) Marsaglia, George, and Wai Wan Tsang. "The ziggurat method for generating random variables." Journal of statistical software 5 (2000): 1-7. (b) Doornik, Jurgen A. "An improved ziggurat method to generate normal random samples." University of Oxford (2005): 77. They are used for the "ziggurat" algorithm to generate normally-distributed random numbers. These were taken from NumPy. BSD License: Copyright (c) 2005-2022, NumPy Developers. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the NumPy Developers nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *******************************************************************************/ #include using std::uint64_t; static const uint64_t ki_double[] = { 0x000EF33D8025EF6AULL, 0x0000000000000000ULL, 0x000C08BE98FBC6A8ULL, 0x000DA354FABD8142ULL, 0x000E51F67EC1EEEAULL, 0x000EB255E9D3F77EULL, 0x000EEF4B817ECAB9ULL, 0x000F19470AFA44AAULL, 0x000F37ED61FFCB18ULL, 0x000F4F469561255CULL, 0x000F61A5E41BA396ULL, 0x000F707A755396A4ULL, 0x000F7CB2EC28449AULL, 0x000F86F10C6357D3ULL, 0x000F8FA6578325DEULL, 0x000F9724C74DD0DAULL, 0x000F9DA907DBF509ULL, 0x000FA360F581FA74ULL, 0x000FA86FDE5B4BF8ULL, 0x000FACF160D354DCULL, 0x000FB0FB6718B90FULL, 0x000FB49F8D5374C6ULL, 0x000FB7EC2366FE77ULL, 0x000FBAECE9A1E50EULL, 0x000FBDAB9D040BEDULL, 0x000FC03060FF6C57ULL, 0x000FC2821037A248ULL, 0x000FC4A67AE25BD1ULL, 0x000FC6A2977AEE31ULL, 0x000FC87AA92896A4ULL, 0x000FCA325E4BDE85ULL, 0x000FCBCCE902231AULL, 0x000FCD4D12F839C4ULL, 0x000FCEB54D8FEC99ULL, 0x000FD007BF1DC930ULL, 0x000FD1464DD6C4E6ULL, 0x000FD272A8E2F450ULL, 0x000FD38E4FF0C91EULL, 0x000FD49A9990B478ULL, 0x000FD598B8920F53ULL, 0x000FD689C08E99ECULL, 0x000FD76EA9C8E832ULL, 0x000FD848547B08E8ULL, 0x000FD9178BAD2C8CULL, 0x000FD9DD07A7ADD2ULL, 0x000FDA9970105E8CULL, 0x000FDB4D5DC02E20ULL, 0x000FDBF95C5BFCD0ULL, 0x000FDC9DEBB99A7DULL, 0x000FDD3B8118729DULL, 0x000FDDD288342F90ULL, 0x000FDE6364369F64ULL, 0x000FDEEE708D514EULL, 0x000FDF7401A6B42EULL, 0x000FDFF46599ED40ULL, 0x000FE06FE4BC24F2ULL, 0x000FE0E6C225A258ULL, 0x000FE1593C28B84CULL, 0x000FE1C78CBC3F99ULL, 0x000FE231E9DB1CAAULL, 0x000FE29885DA1B91ULL, 0x000FE2FB8FB54186ULL, 0x000FE35B33558D4AULL, 0x000FE3B799D0002AULL, 0x000FE410E99EAD7FULL, 0x000FE46746D47734ULL, 0x000FE4BAD34C095CULL, 0x000FE50BAED29524ULL, 0x000FE559F74EBC78ULL, 0x000FE5A5C8E41212ULL, 0x000FE5EF3E138689ULL, 0x000FE6366FD91078ULL, 0x000FE67B75C6D578ULL, 0x000FE6BE661E11AAULL, 0x000FE6FF55E5F4F2ULL, 0x000FE73E5900A702ULL, 0x000FE77B823E9E39ULL, 0x000FE7B6E37070A2ULL, 0x000FE7F08D774243ULL, 0x000FE8289053F08CULL, 0x000FE85EFB35173AULL, 0x000FE893DC840864ULL, 0x000FE8C741F0CEBCULL, 0x000FE8F9387D4EF6ULL, 0x000FE929CC879B1DULL, 0x000FE95909D388EAULL, 0x000FE986FB939AA2ULL, 0x000FE9B3AC714866ULL, 0x000FE9DF2694B6D5ULL, 0x000FEA0973ABE67CULL, 0x000FEA329CF166A4ULL, 0x000FEA5AAB32952CULL, 0x000FEA81A6D5741AULL, 0x000FEAA797DE1CF0ULL, 0x000FEACC85F3D920ULL, 0x000FEAF07865E63CULL, 0x000FEB13762FEC13ULL, 0x000FEB3585FE2A4AULL, 0x000FEB56AE3162B4ULL, 0x000FEB76F4E284FAULL, 0x000FEB965FE62014ULL, 0x000FEBB4F4CF9D7CULL, 0x000FEBD2B8F449D0ULL, 0x000FEBEFB16E2E3EULL, 0x000FEC0BE31EBDE8ULL, 0x000FEC2752B15A15ULL, 0x000FEC42049DAFD3ULL, 0x000FEC5BFD29F196ULL, 0x000FEC75406CEEF4ULL, 0x000FEC8DD2500CB4ULL, 0x000FECA5B6911F12ULL, 0x000FECBCF0C427FEULL, 0x000FECD38454FB15ULL, 0x000FECE97488C8B3ULL, 0x000FECFEC47F91B7ULL, 0x000FED1377358528ULL, 0x000FED278F844903ULL, 0x000FED3B10242F4CULL, 0x000FED4DFBAD586EULL, 0x000FED605498C3DDULL, 0x000FED721D414FE8ULL, 0x000FED8357E4A982ULL, 0x000FED9406A42CC8ULL, 0x000FEDA42B85B704ULL, 0x000FEDB3C8746AB4ULL, 0x000FEDC2DF416652ULL, 0x000FEDD171A46E52ULL, 0x000FEDDF813C8AD3ULL, 0x000FEDED0F909980ULL, 0x000FEDFA1E0FD414ULL, 0x000FEE06AE124BC4ULL, 0x000FEE12C0D95A06ULL, 0x000FEE1E579006E0ULL, 0x000FEE29734B6524ULL, 0x000FEE34150AE4BCULL, 0x000FEE3E3DB89B3CULL, 0x000FEE47EE2982F4ULL, 0x000FEE51271DB086ULL, 0x000FEE59E9407F41ULL, 0x000FEE623528B42EULL, 0x000FEE6A0B5897F1ULL, 0x000FEE716C3E077AULL, 0x000FEE7858327B82ULL, 0x000FEE7ECF7B06BAULL, 0x000FEE84D2484AB2ULL, 0x000FEE8A60B66343ULL, 0x000FEE8F7ACCC851ULL, 0x000FEE94207E25DAULL, 0x000FEE9851A829EAULL, 0x000FEE9C0E13485CULL, 0x000FEE9F557273F4ULL, 0x000FEEA22762CCAEULL, 0x000FEEA4836B42ACULL, 0x000FEEA668FC2D71ULL, 0x000FEEA7D76ED6FAULL, 0x000FEEA8CE04FA0AULL, 0x000FEEA94BE8333BULL, 0x000FEEA950296410ULL, 0x000FEEA8D9C0075EULL, 0x000FEEA7E7897654ULL, 0x000FEEA678481D24ULL, 0x000FEEA48AA29E83ULL, 0x000FEEA21D22E4DAULL, 0x000FEE9F2E352024ULL, 0x000FEE9BBC26AF2EULL, 0x000FEE97C524F2E4ULL, 0x000FEE93473C0A3AULL, 0x000FEE8E40557516ULL, 0x000FEE88AE369C7AULL, 0x000FEE828E7F3DFDULL, 0x000FEE7BDEA7B888ULL, 0x000FEE749BFF37FFULL, 0x000FEE6CC3A9BD5EULL, 0x000FEE64529E007EULL, 0x000FEE5B45A32888ULL, 0x000FEE51994E57B6ULL, 0x000FEE474A0006CFULL, 0x000FEE3C53E12C50ULL, 0x000FEE30B2E02AD8ULL, 0x000FEE2462AD8205ULL, 0x000FEE175EB83C5AULL, 0x000FEE09A22A1447ULL, 0x000FEDFB27E349CCULL, 0x000FEDEBEA76216CULL, 0x000FEDDBE422047EULL, 0x000FEDCB0ECE39D3ULL, 0x000FEDB964042CF4ULL, 0x000FEDA6DCE938C9ULL, 0x000FED937237E98DULL, 0x000FED7F1C38A836ULL, 0x000FED69D2B9C02BULL, 0x000FED538D06AE00ULL, 0x000FED3C41DEA422ULL, 0x000FED23E76A2FD8ULL, 0x000FED0A732FE644ULL, 0x000FECEFDA07FE34ULL, 0x000FECD4100EB7B8ULL, 0x000FECB708956EB4ULL, 0x000FEC98B61230C1ULL, 0x000FEC790A0DA978ULL, 0x000FEC57F50F31FEULL, 0x000FEC356686C962ULL, 0x000FEC114CB4B335ULL, 0x000FEBEB948E6FD0ULL, 0x000FEBC429A0B692ULL, 0x000FEB9AF5EE0CDCULL, 0x000FEB6FE1C98542ULL, 0x000FEB42D3AD1F9EULL, 0x000FEB13B00B2D4BULL, 0x000FEAE2591A02E9ULL, 0x000FEAAEAE992257ULL, 0x000FEA788D8EE326ULL, 0x000FEA3FCFFD73E5ULL, 0x000FEA044C8DD9F6ULL, 0x000FE9C5D62F563BULL, 0x000FE9843BA947A4ULL, 0x000FE93F471D4728ULL, 0x000FE8F6BD76C5D6ULL, 0x000FE8AA5DC4E8E6ULL, 0x000FE859E07AB1EAULL, 0x000FE804F690A940ULL, 0x000FE7AB488233C0ULL, 0x000FE74C751F6AA5ULL, 0x000FE6E8102AA202ULL, 0x000FE67DA0B6ABD8ULL, 0x000FE60C9F38307EULL, 0x000FE5947338F742ULL, 0x000FE51470977280ULL, 0x000FE48BD436F458ULL, 0x000FE3F9BFFD1E37ULL, 0x000FE35D35EEB19CULL, 0x000FE2B5122FE4FEULL, 0x000FE20003995557ULL, 0x000FE13C82788314ULL, 0x000FE068C4EE67B0ULL, 0x000FDF82B02B71AAULL, 0x000FDE87C57EFEAAULL, 0x000FDD7509C63BFDULL, 0x000FDC46E529BF13ULL, 0x000FDAF8F82E0282ULL, 0x000FD985E1B2BA75ULL, 0x000FD7E6EF48CF04ULL, 0x000FD613ADBD650BULL, 0x000FD40149E2F012ULL, 0x000FD1A1A7B4C7ACULL, 0x000FCEE204761F9EULL, 0x000FCBA8D85E11B2ULL, 0x000FC7D26ECD2D22ULL, 0x000FC32B2F1E22EDULL, 0x000FBD6581C0B83AULL, 0x000FB606C4005434ULL, 0x000FAC40582A2874ULL, 0x000F9E971E014598ULL, 0x000F89FA48A41DFCULL, 0x000F66C5F7F0302CULL, 0x000F1A5A4B331C4AULL}; static const double wi_double[] = { 8.68362706080130616677e-16, 4.77933017572773682428e-17, 6.35435241740526230246e-17, 7.45487048124769627714e-17, 8.32936681579309972857e-17, 9.06806040505948228243e-17, 9.71486007656776183958e-17, 1.02947503142410192108e-16, 1.08234302884476839838e-16, 1.13114701961090307945e-16, 1.17663594570229211411e-16, 1.21936172787143633280e-16, 1.25974399146370927864e-16, 1.29810998862640315416e-16, 1.33472037368241227547e-16, 1.36978648425712032797e-16, 1.40348230012423820659e-16, 1.43595294520569430270e-16, 1.46732087423644219083e-16, 1.49769046683910367425e-16, 1.52715150035961979750e-16, 1.55578181694607639484e-16, 1.58364940092908853989e-16, 1.61081401752749279325e-16, 1.63732852039698532012e-16, 1.66323990584208352778e-16, 1.68859017086765964015e-16, 1.71341701765596607184e-16, 1.73775443658648593310e-16, 1.76163319230009959832e-16, 1.78508123169767272927e-16, 1.80812402857991522674e-16, 1.83078487648267501776e-16, 1.85308513886180189386e-16, 1.87504446393738816849e-16, 1.89668097007747596212e-16, 1.91801140648386198029e-16, 1.93905129306251037069e-16, 1.95981504266288244037e-16, 1.98031606831281739736e-16, 2.00056687762733300198e-16, 2.02057915620716538808e-16, 2.04036384154802118313e-16, 2.05993118874037063144e-16, 2.07929082904140197311e-16, 2.09845182223703516690e-16, 2.11742270357603418769e-16, 2.13621152594498681022e-16, 2.15482589785814580926e-16, 2.17327301775643674990e-16, 2.19155970504272708519e-16, 2.20969242822353175995e-16, 2.22767733047895534948e-16, 2.24552025294143552381e-16, 2.26322675592856786566e-16, 2.28080213834501706782e-16, 2.29825145544246839061e-16, 2.31557953510408037008e-16, 2.33279099280043561128e-16, 2.34989024534709550938e-16, 2.36688152357916037468e-16, 2.38376888404542434981e-16, 2.40055621981350627349e-16, 2.41724727046750252175e-16, 2.43384563137110286400e-16, 2.45035476226149539878e-16, 2.46677799523270498158e-16, 2.48311854216108767769e-16, 2.49937950162045242375e-16, 2.51556386532965786439e-16, 2.53167452417135826983e-16, 2.54771427381694417303e-16, 2.56368581998939683749e-16, 2.57959178339286723500e-16, 2.59543470433517070146e-16, 2.61121704706701939097e-16, 2.62694120385972564623e-16, 2.64260949884118951286e-16, 2.65822419160830680292e-16, 2.67378748063236329361e-16, 2.68930150647261591777e-16, 2.70476835481199518794e-16, 2.72019005932773206655e-16, 2.73556860440867908686e-16, 2.75090592773016664571e-16, 2.76620392269639032183e-16, 2.78146444075954410103e-16, 2.79668929362423005309e-16, 2.81188025534502074329e-16, 2.82703906432447923059e-16, 2.84216742521840606520e-16, 2.85726701075460149289e-16, 2.87233946347097994381e-16, 2.88738639737848191815e-16, 2.90240939955384233230e-16, 2.91741003166694553259e-16, 2.93238983144718163965e-16, 2.94735031409293489611e-16, 2.96229297362806647792e-16, 2.97721928420902891115e-16, 2.99213070138601307081e-16, 3.00702866332133102993e-16, 3.02191459196806151971e-16, 3.03678989421180184427e-16, 3.05165596297821922381e-16, 3.06651417830895451744e-16, 3.08136590840829717032e-16, 3.09621251066292253306e-16, 3.11105533263689296831e-16, 3.12589571304399892784e-16, 3.14073498269944617203e-16, 3.15557446545280064031e-16, 3.17041547910402852545e-16, 3.18525933630440648871e-16, 3.20010734544401137886e-16, 3.21496081152744704901e-16, 3.22982103703941557538e-16, 3.24468932280169778077e-16, 3.25956696882307838340e-16, 3.27445527514370671802e-16, 3.28935554267536967851e-16, 3.30426907403912838589e-16, 3.31919717440175233652e-16, 3.33414115231237245918e-16, 3.34910232054077845412e-16, 3.36408199691876507948e-16, 3.37908150518594979994e-16, 3.39410217584148914282e-16, 3.40914534700312603713e-16, 3.42421236527501816058e-16, 3.43930458662583133920e-16, 3.45442337727858401604e-16, 3.46957011461378353333e-16, 3.48474618808741370700e-16, 3.49995300016538099813e-16, 3.51519196727607440975e-16, 3.53046452078274009054e-16, 3.54577210797743572160e-16, 3.56111619309838843415e-16, 3.57649825837265051035e-16, 3.59191980508602994994e-16, 3.60738235468235137839e-16, 3.62288744989419151904e-16, 3.63843665590734438546e-16, 3.65403156156136995766e-16, 3.66967378058870090021e-16, 3.68536495289491401456e-16, 3.70110674588289834952e-16, 3.71690085582382297792e-16, 3.73274900927794352614e-16, 3.74865296456848868882e-16, 3.76461451331202869131e-16, 3.78063548200896037651e-16, 3.79671773369794425924e-16, 3.81286316967837738238e-16, 3.82907373130524317507e-16, 3.84535140186095955858e-16, 3.86169820850914927119e-16, 3.87811622433558721164e-16, 3.89460757048192620674e-16, 3.91117441837820542060e-16, 3.92781899208054153270e-16, 3.94454357072087711446e-16, 3.96135049107613542983e-16, 3.97824215026468259474e-16, 3.99522100857856502444e-16, 4.01228959246062907451e-16, 4.02945049763632792393e-16, 4.04670639241074995115e-16, 4.06406002114225038723e-16, 4.08151420790493873480e-16, 4.09907186035326643447e-16, 4.11673597380302570170e-16, 4.13450963554423599878e-16, 4.15239602940268833891e-16, 4.17039844056831587498e-16, 4.18852026071011229572e-16, 4.20676499339901510978e-16, 4.22513625986204937320e-16, 4.24363780509307796137e-16, 4.26227350434779809917e-16, 4.28104737005311666397e-16, 4.29996355916383230161e-16, 4.31902638100262944617e-16, 4.33824030562279080411e-16, 4.35760997273684900553e-16, 4.37714020125858747008e-16, 4.39683599951052137423e-16, 4.41670257615420348435e-16, 4.43674535190656726604e-16, 4.45696997211204306674e-16, 4.47738232024753387312e-16, 4.49798853244554968009e-16, 4.51879501313005876278e-16, 4.53980845187003400947e-16, 4.56103584156742206384e-16, 4.58248449810956667052e-16, 4.60416208163115281428e-16, 4.62607661954784567754e-16, 4.64823653154320737780e-16, 4.67065065671263059081e-16, 4.69332828309332890697e-16, 4.71627917983835129766e-16, 4.73951363232586715165e-16, 4.76304248053313737663e-16, 4.78687716104872284247e-16, 4.81102975314741720538e-16, 4.83551302941152515162e-16, 4.86034051145081195402e-16, 4.88552653135360343280e-16, 4.91108629959526955862e-16, 4.93703598024033454728e-16, 4.96339277440398725619e-16, 4.99017501309182245754e-16, 5.01740226071808946011e-16, 5.04509543081872748637e-16, 5.07327691573354207058e-16, 5.10197073234156184149e-16, 5.13120268630678373200e-16, 5.16100055774322824569e-16, 5.19139431175769859873e-16, 5.22241633800023428760e-16, 5.25410172417759732697e-16, 5.28648856950494511482e-16, 5.31961834533840037535e-16, 5.35353631181649688145e-16, 5.38829200133405320160e-16, 5.42393978220171234073e-16, 5.46053951907478041166e-16, 5.49815735089281410703e-16, 5.53686661246787600374e-16, 5.57674893292657647836e-16, 5.61789555355541665830e-16, 5.66040892008242216739e-16, 5.70440462129138908417e-16, 5.75001376891989523684e-16, 5.79738594572459365014e-16, 5.84669289345547900201e-16, 5.89813317647789942685e-16, 5.95193814964144415532e-16, 6.00837969627190832234e-16, 6.06778040933344851394e-16, 6.13052720872528159123e-16, 6.19708989458162555387e-16, 6.26804696330128439415e-16, 6.34412240712750598627e-16, 6.42623965954805540945e-16, 6.51560331734499356881e-16, 6.61382788509766415145e-16, 6.72315046250558662913e-16, 6.84680341756425875856e-16, 6.98971833638761995415e-16, 7.15999493483066421560e-16, 7.37242430179879890722e-16, 7.65893637080557275482e-16, 8.11384933765648418565e-16}; static const double fi_double[] = { 1.00000000000000000000e+00, 9.77101701267671596263e-01, 9.59879091800106665211e-01, 9.45198953442299649730e-01, 9.32060075959230460718e-01, 9.19991505039347012840e-01, 9.08726440052130879366e-01, 8.98095921898343418910e-01, 8.87984660755833377088e-01, 8.78309655808917399966e-01, 8.69008688036857046555e-01, 8.60033621196331532488e-01, 8.51346258458677951353e-01, 8.42915653112204177333e-01, 8.34716292986883434679e-01, 8.26726833946221373317e-01, 8.18929191603702366642e-01, 8.11307874312656274185e-01, 8.03849483170964274059e-01, 7.96542330422958966274e-01, 7.89376143566024590648e-01, 7.82341832654802504798e-01, 7.75431304981187174974e-01, 7.68637315798486264740e-01, 7.61953346836795386565e-01, 7.55373506507096115214e-01, 7.48892447219156820459e-01, 7.42505296340151055290e-01, 7.36207598126862650112e-01, 7.29995264561476231435e-01, 7.23864533468630222401e-01, 7.17811932630721960535e-01, 7.11834248878248421200e-01, 7.05928501332754310127e-01, 7.00091918136511615067e-01, 6.94321916126116711609e-01, 6.88616083004671808432e-01, 6.82972161644994857355e-01, 6.77388036218773526009e-01, 6.71861719897082099173e-01, 6.66391343908750100056e-01, 6.60975147776663107813e-01, 6.55611470579697264149e-01, 6.50298743110816701574e-01, 6.45035480820822293424e-01, 6.39820277453056585060e-01, 6.34651799287623608059e-01, 6.29528779924836690007e-01, 6.24450015547026504592e-01, 6.19414360605834324325e-01, 6.14420723888913888899e-01, 6.09468064925773433949e-01, 6.04555390697467776029e-01, 5.99681752619125263415e-01, 5.94846243767987448159e-01, 5.90047996332826008015e-01, 5.85286179263371453274e-01, 5.80559996100790898232e-01, 5.75868682972353718164e-01, 5.71211506735253227163e-01, 5.66587763256164445025e-01, 5.61996775814524340831e-01, 5.57437893618765945014e-01, 5.52910490425832290562e-01, 5.48413963255265812791e-01, 5.43947731190026262382e-01, 5.39511234256952132426e-01, 5.35103932380457614215e-01, 5.30725304403662057062e-01, 5.26374847171684479008e-01, 5.22052074672321841931e-01, 5.17756517229756352272e-01, 5.13487720747326958914e-01, 5.09245245995747941592e-01, 5.05028667943468123624e-01, 5.00837575126148681903e-01, 4.96671569052489714213e-01, 4.92530263643868537748e-01, 4.88413284705458028423e-01, 4.84320269426683325253e-01, 4.80250865909046753544e-01, 4.76204732719505863248e-01, 4.72181538467730199660e-01, 4.68180961405693596422e-01, 4.64202689048174355069e-01, 4.60246417812842867345e-01, 4.56311852678716434184e-01, 4.52398706861848520777e-01, 4.48506701507203064949e-01, 4.44635565395739396077e-01, 4.40785034665803987508e-01, 4.36954852547985550526e-01, 4.33144769112652261445e-01, 4.29354541029441427735e-01, 4.25583931338021970170e-01, 4.21832709229495894654e-01, 4.18100649837848226120e-01, 4.14387534040891125642e-01, 4.10693148270188157500e-01, 4.07017284329473372217e-01, 4.03359739221114510510e-01, 3.99720314980197222177e-01, 3.96098818515832451492e-01, 3.92495061459315619512e-01, 3.88908860018788715696e-01, 3.85340034840077283462e-01, 3.81788410873393657674e-01, 3.78253817245619183840e-01, 3.74736087137891138443e-01, 3.71235057668239498696e-01, 3.67750569779032587814e-01, 3.64282468129004055601e-01, 3.60830600989648031529e-01, 3.57394820145780500731e-01, 3.53974980800076777232e-01, 3.50570941481406106455e-01, 3.47182563956793643900e-01, 3.43809713146850715049e-01, 3.40452257044521866547e-01, 3.37110066637006045021e-01, 3.33783015830718454708e-01, 3.30470981379163586400e-01, 3.27173842813601400970e-01, 3.23891482376391093290e-01, 3.20623784956905355514e-01, 3.17370638029913609834e-01, 3.14131931596337177215e-01, 3.10907558126286509559e-01, 3.07697412504292056035e-01, 3.04501391976649993243e-01, 3.01319396100803049698e-01, 2.98151326696685481377e-01, 2.94997087799961810184e-01, 2.91856585617095209972e-01, 2.88729728482182923521e-01, 2.85616426815501756042e-01, 2.82516593083707578948e-01, 2.79430141761637940157e-01, 2.76356989295668320494e-01, 2.73297054068577072172e-01, 2.70250256365875463072e-01, 2.67216518343561471038e-01, 2.64195763997261190426e-01, 2.61187919132721213522e-01, 2.58192911337619235290e-01, 2.55210669954661961700e-01, 2.52241126055942177508e-01, 2.49284212418528522415e-01, 2.46339863501263828249e-01, 2.43408015422750312329e-01, 2.40488605940500588254e-01, 2.37581574431238090606e-01, 2.34686861872330010392e-01, 2.31804410824338724684e-01, 2.28934165414680340644e-01, 2.26076071322380278694e-01, 2.23230075763917484855e-01, 2.20396127480151998723e-01, 2.17574176724331130872e-01, 2.14764175251173583536e-01, 2.11966076307030182324e-01, 2.09179834621125076977e-01, 2.06405406397880797353e-01, 2.03642749310334908452e-01, 2.00891822494656591136e-01, 1.98152586545775138971e-01, 1.95425003514134304483e-01, 1.92709036903589175926e-01, 1.90004651670464985713e-01, 1.87311814223800304768e-01, 1.84630492426799269756e-01, 1.81960655599522513892e-01, 1.79302274522847582272e-01, 1.76655321443734858455e-01, 1.74019770081838553999e-01, 1.71395595637505754327e-01, 1.68782774801211288285e-01, 1.66181285764481906364e-01, 1.63591108232365584074e-01, 1.61012223437511009516e-01, 1.58444614155924284882e-01, 1.55888264724479197465e-01, 1.53343161060262855866e-01, 1.50809290681845675763e-01, 1.48286642732574552861e-01, 1.45775208005994028060e-01, 1.43274978973513461566e-01, 1.40785949814444699690e-01, 1.38308116448550733057e-01, 1.35841476571253755301e-01, 1.33386029691669155683e-01, 1.30941777173644358090e-01, 1.28508722279999570981e-01, 1.26086870220185887081e-01, 1.23676228201596571932e-01, 1.21276805484790306533e-01, 1.18888613442910059947e-01, 1.16511665625610869035e-01, 1.14145977827838487895e-01, 1.11791568163838089811e-01, 1.09448457146811797824e-01, 1.07116667774683801961e-01, 1.04796225622487068629e-01, 1.02487158941935246892e-01, 1.00189498768810017482e-01, 9.79032790388624646338e-02, 9.56285367130089991594e-02, 9.33653119126910124859e-02, 9.11136480663737591268e-02, 8.88735920682758862021e-02, 8.66451944505580717859e-02, 8.44285095703534715916e-02, 8.22235958132029043366e-02, 8.00305158146630696292e-02, 7.78493367020961224423e-02, 7.56801303589271778804e-02, 7.35229737139813238622e-02, 7.13779490588904025339e-02, 6.92451443970067553879e-02, 6.71246538277884968737e-02, 6.50165779712428976156e-02, 6.29210244377581412456e-02, 6.08381083495398780614e-02, 5.87679529209337372930e-02, 5.67106901062029017391e-02, 5.46664613248889208474e-02, 5.26354182767921896513e-02, 5.06177238609477817000e-02, 4.86135532158685421122e-02, 4.66230949019303814174e-02, 4.46465522512944634759e-02, 4.26841449164744590750e-02, 4.07361106559409394401e-02, 3.88027074045261474722e-02, 3.68842156885673053135e-02, 3.49809414617161251737e-02, 3.30932194585785779961e-02, 3.12214171919203004046e-02, 2.93659397581333588001e-02, 2.75272356696031131329e-02, 2.57058040085489103443e-02, 2.39022033057958785407e-02, 2.21170627073088502113e-02, 2.03510962300445102935e-02, 1.86051212757246224594e-02, 1.68800831525431419000e-02, 1.51770883079353092332e-02, 1.34974506017398673818e-02, 1.18427578579078790488e-02, 1.02149714397014590439e-02, 8.61658276939872638800e-03, 7.05087547137322242369e-03, 5.52240329925099155545e-03, 4.03797259336302356153e-03, 2.60907274610215926189e-03, 1.26028593049859797236e-03}; static const double ziggurat_nor_r = 3.6541528853610087963519472518; static const double ziggurat_nor_inv_r = 0.27366123732975827203338247596; // 1.0 / ziggurat_nor_r;