14#include "Application.h"
15static long double ErrorFun(
double p);
17_declspec(dllexport)
int fnDistribution(DISTRIBUTION nDistributionType,
double *fDistOut,
18 unsigned long *uSeed,
unsigned long *uSeed1,
double* args)
20 double fFirstArg = 0.0;
21 double fSecondArg = 0.0;
23 double fRandomNumber = 0.0;
26 switch (nDistributionType)
28 case Distribution_Exponential:
30 nRandOut = fnRandomNo(10000000, &fRand, uSeed, uSeed1);
31 fRandomNumber = (double) (fRand);
32 fFirstArg = 1 / fFirstArg;
33 *fDistOut = (double) -(1 / fFirstArg)
34 * (double) logl(1 - fRandomNumber);
36 case Distribution_Uniform:
40 nRandOut = fnRandomNo(10000000, &fRand, uSeed, uSeed1);
41 fRandomNumber = (double) (fRand);
42 *fDistOut = fFirstArg + (fSecondArg - fFirstArg) * fRandomNumber;
44 case Distribution_Triangular:
47 nRandOut = fnRandomNo(10000000, &fRand, uSeed, uSeed1);
48 fRandomNumber = (double) (fRand);
49 if (0 <= fRandomNumber && fRandomNumber <= 0.5) {
50 *fDistOut = (double) sqrt(2 * (
double) fRandomNumber);
51 }
else if (fRandomNumber > 0.5 && fRandomNumber <= 1) {
52 *fDistOut = 2 - (double) sqrt(2 * (1 - (
double) fRandomNumber));
55 case Distribution_Weibull:
58 nRandOut = fnRandomNo(10000000, &fRand, uSeed, uSeed1);
59 fRandomNumber = (double) (fRand);
60 *fDistOut = (fFirstArg * (double) pow((-(
double) logl(1 - (1
61 - fRandomNumber))), 1 / fSecondArg));
63 case Distribution_Constant:
65 *fDistOut = fFirstArg;
67 case Distribution_Backlog:
71 case Distribution_Normal:
74 nRandOut = fnRandomNo(10000000, &fRand, uSeed, uSeed1);
75 fRandomNumber = (double) (fRand);
76 *fDistOut = (double) (fFirstArg + fSecondArg * sqrt(2) * ErrorFun(2
77 * fRandomNumber - 1));
83static long double ErrorFun(
double p)
85 return (1.0968 * (sqrt(3.1415) * 0.5 * (p + (3.1415 * pow(p, 3)) / 12 + (7
86 * pow(3.1415, 2) * pow(p, 5)) / 480 + (127 * pow(3.1415, 3) * pow(