29 inline double landauPDF(
const double &x, 
const double &x0, 
const double &xi) 
    31     static double p1[5] = {0.4259894875, -0.1249762550, 0.03984243700, -0.006298287635, 0.001511162253};
    32     static double q1[5] = {1.0, -0.3388260629, 0.09594393323, -0.01608042283, 0.003778942063};
    34     static double p2[5] = {0.1788541609, 0.1173957403, 0.01488850518, -0.001394989411, 0.0001283617211};
    35     static double q2[5] = {1.0, 0.7428795082, 0.3153932961, 0.06694219548, 0.008790609714};
    37     static double p3[5] = {0.1788544503, 0.09359161662, 0.006325387654, 0.00006611667319, -0.000002031049101};
    38     static double q3[5] = {1.0, 0.6097809921, 0.2560616665, 0.04746722384, 0.006957301675};
    40     static double p4[5] = {0.9874054407, 118.6723273, 849.2794360, -743.7792444, 427.0262186};
    41     static double q4[5] = {1.0, 106.8615961, 337.6496214, 2016.712389, 1597.063511};
    43     static double p5[5] = {1.003675074, 167.5702434, 4789.711289, 21217.86767, -22324.94910};
    44     static double q5[5] = {1.0, 156.9424537, 3745.310488, 9834.698876, 66924.28357};
    46     static double p6[5] = {1.000827619, 664.9143136, 62972.92665, 475554.6998, -5743609.109};
    47     static double q6[5] = {1.0, 651.4101098, 56974.73333, 165917.4725, -2815759.939};
    49     static double a1[3] = {0.04166666667, -0.01996527778, 0.02709538966};
    51     static double a2[2] = {-1.845568670, -4.284640743};
    55     double v = (x - x0) / xi;
    56     double u, ue, us, denlan;
    58         u = std::exp(v + 1.0);
    61         ue     = std::exp(-1 / u);
    63         denlan = 0.3989422803 * (ue / us) * (1 + (a1[0] + (a1[1] + a1[2] * u) * u) * u);
    66         denlan = std::exp(-u) * std::sqrt(u) * (p1[0] + (p1[1] + (p1[2] + (p1[3] + p1[4] * v) * v) * v) * v)
    67                  / (q1[0] + (q1[1] + (q1[2] + (q1[3] + q1[4] * v) * v) * v) * v);
    69         denlan = (p2[0] + (p2[1] + (p2[2] + (p2[3] + p2[4] * v) * v) * v) * v)
    70                  / (q2[0] + (q2[1] + (q2[2] + (q2[3] + q2[4] * v) * v) * v) * v);
    72         denlan = (p3[0] + (p3[1] + (p3[2] + (p3[3] + p3[4] * v) * v) * v) * v)
    73                  / (q3[0] + (q3[1] + (q3[2] + (q3[3] + q3[4] * v) * v) * v) * v);
    76         denlan = u * u * (p4[0] + (p4[1] + (p4[2] + (p4[3] + p4[4] * u) * u) * u) * u)
    77                  / (q4[0] + (q4[1] + (q4[2] + (q4[3] + q4[4] * u) * u) * u) * u);
    80         denlan = u * u * (p5[0] + (p5[1] + (p5[2] + (p5[3] + p5[4] * u) * u) * u) * u)
    81                  / (q5[0] + (q5[1] + (q5[2] + (q5[3] + q5[4] * u) * u) * u) * u);
    84         denlan = u * u * (p6[0] + (p6[1] + (p6[2] + (p6[3] + p6[4] * u) * u) * u) * u)
    85                  / (q6[0] + (q6[1] + (q6[2] + (q6[3] + q6[4] * u) * u) * u) * u);
    87         u      = 1 / (v - v * std::log(v) / (v + 1));
    88         denlan = u * u * (1 + (a2[0] + a2[1] * u) * u);
    93 inline double gaussPDF(
const double &x, 
const double &mu, 
const double &
sigma) {
    94     return invsq2pi / sigma * exp(-pow((x - mu), 2) / (2 * pow(sigma, 2)));
    97 inline double landauGaussPDF(
const double &x, 
const double &mu, 
const double &eta, 
const double &
sigma) {
   103     unsigned int np       = 100; 
   104     const unsigned int sc = 8;   
   109         np *= int(sigma / eta / 3.);
   125     xlow = x - sc * 
sigma;
   126     xupp = x + sc * 
sigma;
   128     step = (xupp - xlow) / (
double)np;
   131     for(
unsigned int i = 1; i <= np / 2; ++i) {
   132         xx    = xlow + double(i - 0.5) * step;
   134         sum += fland * 
gaussPDF(x, xx, sigma);
   136         xx    = xupp - double(i - 0.5) * step;
   138         sum += fland * 
gaussPDF(x, xx, sigma);
   152         = {0,         0,         0,         0,         0,         -2.244733, -2.204365, -2.168163, -2.135219, -2.104898,
   153            -2.076740, -2.050397, -2.025605, -2.002150, -1.979866, -1.958612, -1.938275, -1.918760, -1.899984, -1.881879,
   154            -1.864385, -1.847451, -1.831030, -1.815083, -1.799574, -1.784473, -1.769751, -1.755383, -1.741346, -1.727620,
   155            -1.714187, -1.701029, -1.688130, -1.675477, -1.663057, -1.650858, -1.638868, -1.627078, -1.615477, -1.604058,
   156            -1.592811, -1.581729, -1.570806, -1.560034, -1.549407, -1.538919, -1.528565, -1.518339, -1.508237, -1.498254,
   157            -1.488386, -1.478628, -1.468976, -1.459428, -1.449979, -1.440626, -1.431365, -1.422195, -1.413111, -1.404112,
   158            -1.395194, -1.386356, -1.377594, -1.368906, -1.360291, -1.351746, -1.343269, -1.334859, -1.326512, -1.318229,
   159            -1.310006, -1.301843, -1.293737, -1.285688, -1.277693, -1.269752, -1.261863, -1.254024, -1.246235, -1.238494,
   160            -1.230800, -1.223153, -1.215550, -1.207990, -1.200474, -1.192999, -1.185566, -1.178172, -1.170817, -1.163500,
   161            -1.156220, -1.148977, -1.141770, -1.134598, -1.127459, -1.120354, -1.113282, -1.106242, -1.099233, -1.092255,
   162            -1.085306, -1.078388, -1.071498, -1.064636, -1.057802, -1.050996, -1.044215, -1.037461, -1.030733, -1.024029,
   163            -1.017350, -1.010695, -1.004064, -.997456,  -.990871,  -.984308,  -.977767,  -.971247,  -.964749,  -.958271,
   164            -.951813,  -.945375,  -.938957,  -.932558,  -.926178,  -.919816,  -.913472,  -.907146,  -.900838,  -.894547,
   165            -.888272,  -.882014,  -.875773,  -.869547,  -.863337,  -.857142,  -.850963,  -.844798,  -.838648,  -.832512,
   166            -.826390,  -.820282,  -.814187,  -.808106,  -.802038,  -.795982,  -.789940,  -.783909,  -.777891,  -.771884,
   167            -.765889,  -.759906,  -.753934,  -.747973,  -.742023,  -.736084,  -.730155,  -.724237,  -.718328,  -.712429,
   168            -.706541,  -.700661,  -.694791,  -.688931,  -.683079,  -.677236,  -.671402,  -.665576,  -.659759,  -.653950,
   169            -.648149,  -.642356,  -.636570,  -.630793,  -.625022,  -.619259,  -.613503,  -.607754,  -.602012,  -.596276,
   170            -.590548,  -.584825,  -.579109,  -.573399,  -.567695,  -.561997,  -.556305,  -.550618,  -.544937,  -.539262,
   171            -.533592,  -.527926,  -.522266,  -.516611,  -.510961,  -.505315,  -.499674,  -.494037,  -.488405,  -.482777,
   172            -.477153,  -.471533,  -.465917,  -.460305,  -.454697,  -.449092,  -.443491,  -.437893,  -.432299,  -.426707,
   173            -.421119,  -.415534,  -.409951,  -.404372,  -.398795,  -.393221,  -.387649,  -.382080,  -.376513,  -.370949,
   174            -.365387,  -.359826,  -.354268,  -.348712,  -.343157,  -.337604,  -.332053,  -.326503,  -.320955,  -.315408,
   175            -.309863,  -.304318,  -.298775,  -.293233,  -.287692,  -.282152,  -.276613,  -.271074,  -.265536,  -.259999,
   176            -.254462,  -.248926,  -.243389,  -.237854,  -.232318,  -.226783,  -.221247,  -.215712,  -.210176,  -.204641,
   177            -.199105,  -.193568,  -.188032,  -.182495,  -.176957,  -.171419,  -.165880,  -.160341,  -.154800,  -.149259,
   178            -.143717,  -.138173,  -.132629,  -.127083,  -.121537,  -.115989,  -.110439,  -.104889,  -.099336,  -.093782,
   179            -.088227,  -.082670,  -.077111,  -.071550,  -.065987,  -.060423,  -.054856,  -.049288,  -.043717,  -.038144,
   180            -.032569,  -.026991,  -.021411,  -.015828,  -.010243,  -.004656,  .000934,   .006527,   .012123,   .017722,
   181            .023323,   .028928,   .034535,   .040146,   .045759,   .051376,   .056997,   .062620,   .068247,   .073877,
   182            .079511,   .085149,   .090790,   .096435,   .102083,   .107736,   .113392,   .119052,   .124716,   .130385,
   183            .136057,   .141734,   .147414,   .153100,   .158789,   .164483,   .170181,   .175884,   .181592,   .187304,
   184            .193021,   .198743,   .204469,   .210201,   .215937,   .221678,   .227425,   .233177,   .238933,   .244696,
   185            .250463,   .256236,   .262014,   .267798,   .273587,   .279382,   .285183,   .290989,   .296801,   .302619,
   186            .308443,   .314273,   .320109,   .325951,   .331799,   .337654,   .343515,   .349382,   .355255,   .361135,
   187            .367022,   .372915,   .378815,   .384721,   .390634,   .396554,   .402481,   .408415,   .414356,   .420304,
   188            .426260,   .432222,   .438192,   .444169,   .450153,   .456145,   .462144,   .468151,   .474166,   .480188,
   189            .486218,   .492256,   .498302,   .504356,   .510418,   .516488,   .522566,   .528653,   .534747,   .540850,
   190            .546962,   .553082,   .559210,   .565347,   .571493,   .577648,   .583811,   .589983,   .596164,   .602355,
   191            .608554,   .614762,   .620980,   .627207,   .633444,   .639689,   .645945,   .652210,   .658484,   .664768,
   192            .671062,   .677366,   .683680,   .690004,   .696338,   .702682,   .709036,   .715400,   .721775,   .728160,
   193            .734556,   .740963,   .747379,   .753807,   .760246,   .766695,   .773155,   .779627,   .786109,   .792603,
   194            .799107,   .805624,   .812151,   .818690,   .825241,   .831803,   .838377,   .844962,   .851560,   .858170,
   195            .864791,   .871425,   .878071,   .884729,   .891399,   .898082,   .904778,   .911486,   .918206,   .924940,
   196            .931686,   .938446,   .945218,   .952003,   .958802,   .965614,   .972439,   .979278,   .986130,   .992996,
   197            .999875,   1.006769,  1.013676,  1.020597,  1.027533,  1.034482,  1.041446,  1.048424,  1.055417,  1.062424,
   198            1.069446,  1.076482,  1.083534,  1.090600,  1.097681,  1.104778,  1.111889,  1.119016,  1.126159,  1.133316,
   199            1.140490,  1.147679,  1.154884,  1.162105,  1.169342,  1.176595,  1.183864,  1.191149,  1.198451,  1.205770,
   200            1.213105,  1.220457,  1.227826,  1.235211,  1.242614,  1.250034,  1.257471,  1.264926,  1.272398,  1.279888,
   201            1.287395,  1.294921,  1.302464,  1.310026,  1.317605,  1.325203,  1.332819,  1.340454,  1.348108,  1.355780,
   202            1.363472,  1.371182,  1.378912,  1.386660,  1.394429,  1.402216,  1.410024,  1.417851,  1.425698,  1.433565,
   203            1.441453,  1.449360,  1.457288,  1.465237,  1.473206,  1.481196,  1.489208,  1.497240,  1.505293,  1.513368,
   204            1.521465,  1.529583,  1.537723,  1.545885,  1.554068,  1.562275,  1.570503,  1.578754,  1.587028,  1.595325,
   205            1.603644,  1.611987,  1.620353,  1.628743,  1.637156,  1.645593,  1.654053,  1.662538,  1.671047,  1.679581,
   206            1.688139,  1.696721,  1.705329,  1.713961,  1.722619,  1.731303,  1.740011,  1.748746,  1.757506,  1.766293,
   207            1.775106,  1.783945,  1.792810,  1.801703,  1.810623,  1.819569,  1.828543,  1.837545,  1.846574,  1.855631,
   208            1.864717,  1.873830,  1.882972,  1.892143,  1.901343,  1.910572,  1.919830,  1.929117,  1.938434,  1.947781,
   209            1.957158,  1.966566,  1.976004,  1.985473,  1.994972,  2.004503,  2.014065,  2.023659,  2.033285,  2.042943,
   210            2.052633,  2.062355,  2.072110,  2.081899,  2.091720,  2.101575,  2.111464,  2.121386,  2.131343,  2.141334,
   211            2.151360,  2.161421,  2.171517,  2.181648,  2.191815,  2.202018,  2.212257,  2.222533,  2.232845,  2.243195,
   212            2.253582,  2.264006,  2.274468,  2.284968,  2.295507,  2.306084,  2.316701,  2.327356,  2.338051,  2.348786,
   213            2.359562,  2.370377,  2.381234,  2.392131,  2.403070,  2.414051,  2.425073,  2.436138,  2.447246,  2.458397,
   214            2.469591,  2.480828,  2.492110,  2.503436,  2.514807,  2.526222,  2.537684,  2.549190,  2.560743,  2.572343,
   215            2.583989,  2.595682,  2.607423,  2.619212,  2.631050,  2.642936,  2.654871,  2.666855,  2.678890,  2.690975,
   216            2.703110,  2.715297,  2.727535,  2.739825,  2.752168,  2.764563,  2.777012,  2.789514,  2.802070,  2.814681,
   217            2.827347,  2.840069,  2.852846,  2.865680,  2.878570,  2.891518,  2.904524,  2.917588,  2.930712,  2.943894,
   218            2.957136,  2.970439,  2.983802,  2.997227,  3.010714,  3.024263,  3.037875,  3.051551,  3.065290,  3.079095,
   219            3.092965,  3.106900,  3.120902,  3.134971,  3.149107,  3.163312,  3.177585,  3.191928,  3.206340,  3.220824,
   220            3.235378,  3.250005,  3.264704,  3.279477,  3.294323,  3.309244,  3.324240,  3.339312,  3.354461,  3.369687,
   221            3.384992,  3.400375,  3.415838,  3.431381,  3.447005,  3.462711,  3.478500,  3.494372,  3.510328,  3.526370,
   222            3.542497,  3.558711,  3.575012,  3.591402,  3.607881,  3.624450,  3.641111,  3.657863,  3.674708,  3.691646,
   223            3.708680,  3.725809,  3.743034,  3.760357,  3.777779,  3.795300,  3.812921,  3.830645,  3.848470,  3.866400,
   224            3.884434,  3.902574,  3.920821,  3.939176,  3.957640,  3.976215,  3.994901,  4.013699,  4.032612,  4.051639,
   225            4.070783,  4.090045,  4.109425,  4.128925,  4.148547,  4.168292,  4.188160,  4.208154,  4.228275,  4.248524,
   226            4.268903,  4.289413,  4.310056,  4.330832,  4.351745,  4.372794,  4.393982,  4.415310,  4.436781,  4.458395,
   227            4.480154,  4.502060,  4.524114,  4.546319,  4.568676,  4.591187,  4.613854,  4.636678,  4.659662,  4.682807,
   228            4.706116,  4.729590,  4.753231,  4.777041,  4.801024,  4.825179,  4.849511,  4.874020,  4.898710,  4.923582,
   229            4.948639,  4.973883,  4.999316,  5.024942,  5.050761,  5.076778,  5.102993,  5.129411,  5.156034,  5.182864,
   230            5.209903,  5.237156,  5.264625,  5.292312,  5.320220,  5.348354,  5.376714,  5.405306,  5.434131,  5.463193,
   231            5.492496,  5.522042,  5.551836,  5.581880,  5.612178,  5.642734,  5.673552,  5.704634,  5.735986,  5.767610,
   232            5.799512,  5.831694,  5.864161,  5.896918,  5.929968,  5.963316,  5.996967,  6.030925,  6.065194,  6.099780,
   233            6.134687,  6.169921,  6.205486,  6.241387,  6.277630,  6.314220,  6.351163,  6.388465,  6.426130,  6.464166,
   234            6.502578,  6.541371,  6.580553,  6.620130,  6.660109,  6.700495,  6.741297,  6.782520,  6.824173,  6.866262,
   235            6.908795,  6.951780,  6.995225,  7.039137,  7.083525,  7.128398,  7.173764,  7.219632,  7.266011,  7.312910,
   236            7.360339,  7.408308,  7.456827,  7.505905,  7.555554,  7.605785,  7.656608,  7.708035,  7.760077,  7.812747,
   237            7.866057,  7.920019,  7.974647,  8.029953,  8.085952,  8.142657,  8.200083,  8.258245,  8.317158,  8.376837,
   238            8.437300,  8.498562,  8.560641,  8.623554,  8.687319,  8.751955,  8.817481,  8.883916,  8.951282,  9.019600,
   239            9.088889,  9.159174,  9.230477,  9.302822,  9.376233,  9.450735,  9.526355,  9.603118,  9.681054,  9.760191,
   240            9.840558,  9.922186,  10.005107, 10.089353, 10.174959, 10.261958, 10.350389, 10.440287, 10.531693, 10.624646,
   241            10.719188, 10.815362, 10.913214, 11.012789, 11.114137, 11.217307, 11.322352, 11.429325, 11.538283, 11.649285,
   242            11.762390, 11.877664, 11.995170, 12.114979, 12.237161, 12.361791, 12.488946, 12.618708, 12.751161, 12.886394,
   243            13.024498, 13.165570, 13.309711, 13.457026, 13.607625, 13.761625, 13.919145, 14.080314, 14.245263, 14.414134,
   244            14.587072, 14.764233, 14.945778, 15.131877, 15.322712, 15.518470, 15.719353, 15.925570, 16.137345, 16.354912,
   245            16.578520, 16.808433, 17.044929, 17.288305, 17.538873, 17.796967, 18.062943, 18.337176, 18.620068, 18.912049,
   246            19.213574, 19.525133, 19.847249, 20.180480, 20.525429, 20.882738, 21.253102, 21.637266, 22.036036, 22.450278,
   247            22.880933, 23.329017, 23.795634, 24.281981, 24.789364, 25.319207, 25.873062, 26.452634, 27.059789, 27.696581,
   248            28.365274, 29.068370, 29.808638, 30.589157, 31.413354, 32.285060, 33.208568, 34.188705, 35.230920, 36.341388,
   249            37.527131, 38.796172, 40.157721, 41.622399, 43.202525, 44.912465, 46.769077, 48.792279, 51.005773, 53.437996,
   250            56.123356, 59.103894};
   255         return -std::numeric_limits<double>::infinity();
   257         return std::numeric_limits<double>::infinity();
   263     if(i >= 70 && i < 800) {
   264         ranlan = f[i - 1] + u * (f[i] - f[i - 1]);
   265     } 
else if(i >= 7 && i <= 980) {
   266         ranlan = f[i - 1] + u * (f[i] - f[i - 1] - 0.25 * (1 - u) * (f[i + 1] - f[i] - f[i - 1] + f[i - 2]));
   270         ranlan = ((0.99858950 + (3.45213058E1 + 1.70854528E1 * u) * u) / (1 + (3.41760202E1 + 4.01244582 * u) * u))
   271                  * (-std::log(-0.91893853 - v) - 1);
   277                 = (1.00060006 + 2.63991156E2 * u + 4.37320068E3 * v) / ((1 + 2.57368075E2 * u + 3.41448018E3 * v) * u);
   280                 = (1.00001538 + 6.07514119E3 * u + 7.34266409E5 * v) / ((1 + 6.06511919E3 * u + 6.94021044E5 * v) * u);
 double landauGaussPDF(const double &x, const double &mu, const double &eta, const double &sigma)
double landau_quantile(double z, double xi)
double gaussPDF(const double &x, const double &mu, const double &sigma)
double landauPDF(const double &x, const double &x0, const double &xi)
double landau_quantile_c(double z, double xi)