Poisson Twister Generator by Cumulative Frequency Technology
Abstract
1. Introduction
namespace P060102
{ class cP060102
{ static uint gc = 0; //quantity of uniform generation
static void Main(string[] args)
{ int w = 16; //bit width of uniform integer variable
long N = 1L << w; //random variable quantity
Console.WriteLine(“w = {0} N = {1}”, w, N);
double Alpha = 2.0;
Console.WriteLine(“Alpha = {0:F2}”, Alpha);
Random G = new Random(); //uniform generator p
int wX = 200;
int[] nuK = new int[wX]; //Knuth frequency
for (int i = 0; i < wX; i++) nuK[i] = 0;
int maxK = 0; //distribution length
for (int i = 0; i < N; i++)
{ int k = KnuthPoisson(Alpha, N, G);
nuK[k]++; //Knuth frequency
if (k > maxK) maxK = k; //distribution length
}
Console.WriteLine(“maxK = {0}”, maxK);
double[] pEta = new double[wX]; //probability
long[] nuEta = new long[wX]; //Poisson frequency
int cEta = PoissonP(Alpha, N, pEta, nuEta);
VerifyProbability(N, cEta, pEta, nuEta);
Console.WriteLine(“cEta = {0} ”, cEta);
long snuEta = 0; //sum of Poisson frequency
double spEta = 0.0; //sum of Poisson probability
int snuK = 0; //sum of Knuth frequency
double spK = 0.0; //sum of Knuth probability
Console.Write(“Eta pK nuK”);
Console.Write(“ pEta nuEta”);
Console.WriteLine(“ nuK − nuEta”);
int nEta = cEta > maxK ? cEta : maxK;
for (int i = 0; i <= nEta; i++) //frequency tabling
{ double pK = (double)nuK[i]/(double)N;
int dnu = (int)(nuK[i] − nuEta[i]);
Console.Write(“{0,2} {2,12:F10} {1,10}”,
i, nuK[i], pK);
Console.Write(“ {0,12:F10} {1,10}”,
pEta[i], nuEta[i]);
Console.WriteLine(“ {0,8}”, dnu);
snuK += nuK[i]; //sum of Knuth frequency
spK += pK; //sum of Knuth probability
snuEta += nuEta[i]; //sum of Poisson frequency
spEta += pEta[i]; //sum of Poisson probability
}
Console.Write(“sum spK snuK”);
Console.WriteLine(“ spEta snuEta”);
Console.Write(“ {0,12:F10} {1,10}”,
spK, snuK);
Console.WriteLine(“ {0,12:F10} {1,10}”,
spEta, snuEta);
Console.WriteLine(“gc = {0}”, gc);
Console.ReadKey(); //result viewing
}
//--------------------------------------------------------------
static int KnuthPoisson(double Lam, long N, Random G)
{ double L = Math.Exp(-Lam);
double p = 1.0;
double dN = (double)N;
int k = 0;
do
{ k++;
long z = (long)G.Next(); //uniform variable
z = z & (N − 1);
double u = (double)z/dN;
p = p * u;
gc++; //global number of uniform generation
} while (p > L);
return k − 1;
}
//--------------------------------------------------------------
static int PoissonP(double alpha, long N,
double[] pEta, long[] nuEta)
{ double emAlpha = Math.Exp(-alpha);
double spEta = 0.0; //probability sum
long snuEta = 0L; //frequency sum
pEta [0] = 1.0 * emAlpha; //Poisson probability p(0)
spEta += pEta[0]; //probability sum
nuEta[0] = (long)Math.Round(pEta[0] * (double)N);
snuEta += nuEta[0]; //frequency sum
double r = alpha; //Tailor first summand
pEta[1] = r * emAlpha; //Poisson probability p(1)
spEta += pEta[1]; //probability sum
nuEta[1] = (long)Math.Round(pEta[1] * (double)N);
snuEta += nuEta[1]; //frequency sum
int Eta = 2; //random variable value
do
{ r *= alpha/(double)Eta; //regular summand of exp
double p = r * emAlpha; //probability p(Eta)
long nu = (long)Math.Round(p * (double)N);
long sd = snuEta + nu;
if (nu == 0L || sd > N) break; //the tail
pEta[Eta] = p; //probability p(Eta)
spEta += p; //probability sum
nuEta[Eta] = nu; //frequency nu(Eta)
snuEta += nu; //frequency sum
Eta++; //next random variable Eta
} while (snuEta < N);
long d = N − snuEta; //tailing frequencies
if (d == 0L) return Eta − 1;
double d1N = (1.0 − spEta)/(double)d;
do
{ pEta[Eta] = d1N; //the tail event probability
nuEta[Eta] = 1; //one-part event
snuEta++; //frequency sum
Eta++;
} while (snuEta < N);
return Eta − 1;
}
//--------------------------------------------------------------
static void VerifyProbability(long N, int cEta,
double[] pEta, long[] nuEta)
{ double dN = (double)N;
for (int i = 0; i <= cEta; i++)
pEta[i] = (double)nuEta[i]/dN;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
}
}
w = 16 N = 65536
Alpha = 2.00
maxK = 12
cEta = 10
Eta pK nuK pEta nuEta nuK − nuEta
0 0.1352539063 8864 0.1353302002 8869 −5
1 0.2691345215 17638 0.2706756592 17739 −101
2 0.2699890137 17694 0.2706756592 17739 −45
3 0.1814422607 11891 0.1804504395 11826 65
4 0.0910491943 5967 0.0902252197 5913 54
5 0.0361175537 2367 0.0360870361 2365 2
6 0.0125427246 822 0.0120239258 788 34
7 0.0032806396 215 0.0034332275 225 −10
8 0.0008850098 58 0.0008544922 56 2
9 0.0002441406 16 0.0001983643 13 3
10 0.0000457764 3 0.0000457764 3 0
11 0.0000000000 0 0.0000000000 0 0
12 0.0000152588 1 0.0000000000 0 1
sum spK snuk spEta snuEta
1.0000000000 65536 1.0000000000 65536
gc = 197025
2. Theory
- The probability of events in the time interval does not depend on its origin t:
- The probability of one event in the time interval depends linearly on the length of the interval with given intensity ; and the probability of observing other events is negligible:
using nsDeonYuliTwist32D; //complete twister generator
//of integer uniform numbers
namespace P060202
{ class cP060202
{ static void Main(string[] args)
{ int w = 32; //bit width of uniform integer variable
long N = 1L << w; //random variable quantity
Console.WriteLine(“w = {0} N = {1}”, w, N);
double Alpha = 2.0;
Console.WriteLine(“Alpha = {0:F2}”, Alpha);
int wX = 200;
double[] pEta = new double[wX]; //Poisson probability
long[] nuEta = new long[wX]; //Poisson frequency
long[] cnuEta = new long[wX]; //cumulative frequency
int cEta = PoissonDY(Alpha, pEta, nuEta, cnuEta, N);
VerifyProbability(N, cEta, pEta, nuEta, cnuEta);
Console.WriteLine(“cEta = {0}”, cEta);
cDeonYuliTwist32D DYG = new cDeonYuliTwist32D();
DYG.SetW(w); //set bit width of uniform variable
DYG.Start(); //start uniform generator
long[] nuDYG = new long[wX];//frequencies of generator
for (int i = 0; i < wX; i++) nuDYG[i] = 0;
for (long j = 0; j < N; j++)
{ long z = DYG.Next(); //uniform variable
int Eta = SearchEta(z, cnuEta, cEta);
nuDYG[Eta]++; //uniform variable counter
}
double spEta = 0.0; //sum of Poisson probability
long snuEta = 0; //sum of Poisson frequency
long snuDYG = 0; //sum of variables by generator
Console.Write(“Eta pEta nuEta”);
Console.WriteLine(“ cnuEta nuDYG”);
for (int Eta = 0; Eta <= cEta; Eta++)
{ Console.WriteLine(
“{0,2} {1,12:F10} {2,10} {3,10} {4,10}”,
Eta, pEta[Eta], nuEta[Eta],
cnuEta[Eta], nuDYG[Eta]);
spEta += pEta[Eta];
snuEta += nuEta[Eta];
snuDYG += nuDYG[Eta];
}
Console.Write(“Sum spEta snuEta”);
Console.WriteLine(“ snuDYG”);
Console.Write(“ {0,12:F10} {1,10}”,
spEta, snuEta);
Console.WriteLine(“ {0,10}”, snuDYG);
Console.ReadKey(); //result viewing
}
//--------------------------------------------------------------
static int PoissonDY (double alpha, double[] pEta,
long[] nuEta, long[] cnuEta, long N)
{ double emAlpha = Math.Exp(−alpha);
double spEta = 0.0; //sum of probability
long snuEta = 0L; //sum of frequency
pEta[0] = 1.0 * emAlpha; //Poisson probability p(0)
spEta += pEta[0]; //sum of probability
nuEta[0] = (long)Math.Round(pEta[0] * (double)N);
snuEta += nuEta[0]; //sum of frequency
cnuEta[0] = snuEta; //cumulative frequency cnu(0)
double r = alpha; //Tailor first summand
pEta[1] = r * emAlpha; //Poisson probability p(1)
spEta += pEta[1]; //sum of probability
nuEta[1] = (long)Math.Round(pEta[1] * (double)N);
snuEta += nuEta[1]; //sum of frequency
cnuEta[1] = snuEta; //cumulative frequency cnu(1)
int Eta = 2; //random variable
do
{ r *= alpha/(double)Eta; //regular summand of exp
double p = r * emAlpha; //probability p(Eta)
long nu = (long)Math.Round(p * (double)N);
long sd = snuEta + nu;
if (nu == 0L || sd > N) break; //the tail
pEta[Eta] = p; //probability p(Eta)
spEta += p; //sum of probability
nuEta[Eta] = nu; //frequency nu(Eta)
snuEta += nu; //sum of frequency
cnuEta[Eta] = snuEta; //cumulative frequency
Eta++; //next random variablecлeдyющaя Eta
} while (snuEta < N);
Eta--;
long d = N − snuEta; //tailing frequencies
if (d == 0L) return Eta;
double d1N = (1.0 − spEta)/(double)d;
do
{ Eta++;
pEta[Eta] = d1N; //probability of a tail event
nuEta[Eta] = 1; //one-frequency event
snuEta++; //sum of frequency
cnuEta[Eta] = snuEta; //cumulative frequency
} while (snuEta < N);
return Eta;
}
//--------------------------------------------------------------
static void VerifyProbability (long N, int cEta,
double[] pEta, long[] nuEta, long[] cnuEta)
{ double dN = (double)N;
for (int i = 0; i <= cEta; i++)
pEta[i] = (double)nuEta[i]/dN;
}
//--------------------------------------------------------------
static int SearchEta (long z, long[] cnuEta, int cEta)
{ int Eta = 0;
for (; Eta <= cEta; Eta++)
if (z < cnuEta[Eta]) break;
return Eta;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
}
}
w = 32 N = 4294967296
Alpha = 2.00
cEta = 16
Eta pEta nuEta cnuEta nuDYG
0 0.1353352831 581260615 581260615 581260615
1 0.2706705665 1162521231 1743781846 1162521231
2 0.2706705665 1162521231 2906303077 1162521231
3 0.1804470443 775014154 3681317231 775014154
4 0.0902235222 387507077 4068824308 387507077
5 0.0360894089 155002831 4223827139 155002831
6 0.0120298029 51667610 4275494749 51667610
7 0.0034370865 14762174 4290256923 14762174
8 0.0008592717 3690544 4293947467 3690544
9 0.0001909493 820121 4294767588 820121
10 0.0000381898 164024 4294931612 164024
11 0.0000069437 29823 4294961435 29823
12 0.0000011572 4970 4294966405 4970
13 0.0000001781 765 4294967170 765
14 0.0000000254 109 4294967279 109
15 0.0000000035 15 4294967294 15
16 0.0000000005 2 4294967296 2
Sum spEta snuEta snuDYG
1.000000000 4294967296 4294967296
3. Construction and Results
using nsDeonYuliTwist32D; //complete twister generator
//of integer uniform numbers
namespace nsDeonYuliCPoissonTwist32D
{ class cDeonYuliCPoissonTwist32D : cDeonYuliTwist32D
{ public long N; //quantity of uniform events
public double dN; //quantity of uniform events
public double Alpha = 2.0; //Alpha parameter
double emAlpha; //exp(−Alpha)
public int cEta; //maximal Eta
public double[] pC; //probability distribution
public long[] nuC; //frequency distribution
public long[] cnuC; //cumulative frequencies
//--------------------------------------------------------------
public cDeonYuliCPoissonTwist32D () {}
//--------------------------------------------------------------
public void CStart(double alpha)
{ Alpha = alpha; //Alpha parameter
base.Start(); //uniform twister generator
CStartInside();
}
//--------------------------------------------------------------
public void CTimeStart(double alpha)
{ Alpha = alpha; //Alpha parameter
base.TimeStart(); //uniform twister generator
CStartInside();
}
//--------------------------------------------------------------
void CStartInside()
{ int wX = 200;
pC = new double[wX]; //probability distribution
nuC = new long[wX]; //frequency distribution
cnuC = new long[wX]; //cumulative frequencies
emAlpha = Math.Exp(−Alpha); //exp(−Alpha)
N = (long)N1 + 1L; //quantity of uniform events
dN = (double)N; //quantity of uniform events
cEta = CPoissonDY(); //probability and frequency
CVerifyProbability(); //probability verification
}
//--------------------------------------------------------------
public int CNext()
{ uint z =base.Next(); //uniform random variable
return CSearchEta(z); //Poisson random variable
}
//--------------------------------------------------------------
int CPoissonDY()
{ double spC = 0.0; //probability sum
long snuC = 0L; //frequency sum
pC[0] = 1.0 * emAlpha; //Poisson probability p(0)
spC += pC[0]; //probability sum
nuC[0] = (long)Math.Round(pC[0] * dN);//frequency nu(0)
snuC += nuC[0]; //frequency sum
cnuC[0] = snuC; //cumulative frequency cnu(0)
double r = Alpha; //Tailor first summand
pC[1] = r * emAlpha; //Poisson probability p(1)
spC += pC[1]; //probability sum
nuC[1] = (long)Math.Round(pC[1] * dN);//frequency nu(1)
snuC += nuC[1]; //frequency sum
cnuC[1] = snuC; //cumulative frequency cnu(1)
int Eta = 2; //random variable
do
{ r *= Alpha/(double)Eta; //regular summand of exp
double p = r * emAlpha; //probability p(Eta)
long nu = (long)Math.Round(p * dN);
if (nu == 0L) break; //a tail zero frequencies
long sd = snuC + nu;
if (nu == 0L || sd > N) break; //the tail
pC[Eta] = p; //probability p(Eta)
spC += p; //probability sum
nuC[Eta] = nu; //frquency nu(Eta)
snuC += nu; //frequency sum
cnuC[Eta] = snuC; //cumulative frequency
Eta++; //the next random variable Eta
} while (snuC < N);
Eta--;
long d = N − snuC; //a tail frequencies
if (d == 0L) return Eta;
double d1N = (1.0 − spC)/(double)d;
do
{ Eta++;
pC[Eta] = d1N; //a tail event probability
nuC[Eta] = 1; //one-frequency event
snuC++; //frequency sum
cnuC[Eta] = snuC; //cumulative frequency
} while (snuC < N);
return Eta;
}
//--------------------------------------------------------------
void CVerifyProbability()
{ for (int i = 0; i <= cEta; i++)
pC[i] = (double)nuC[i]/dN;
}
//--------------------------------------------------------------
int CSearchEta(uint z)
{ int Eta = 0;
for (; Eta <= cEta; Eta++)
if (z < cnuC[Eta]) break;
return Eta;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
}
}
using nsDeonYuliCPoissonTwist32D; //Poisson twister generator
//by technology of cumulative frequencies
namespace P060302
{ class cP060302
{ static void Main(string[] args)
{ cDeonYuliCPoissonTwist32D PT =
new cDeonYuliCPoissonTwist32D();
int w = 7; //bit width of uniform random variable
PT.SetW(w); //set bit width of uniform variable
double Alpha = 2.0; //Alpha parameter
PT.CStart(Alpha); //start generator
// PT.CTimeStart(Alpha);//start generator using time value
Console.WriteLine(“w = {0} N = {1}”, PT.w, PT.N);
Console.WriteLine(“Alpha = {0:F2}”, Alpha);
Console.WriteLine(“cEta = {0}”, PT.cEta);
int wX = 200;
int[] nuG = new int[wX]; //frequencies of generator
for (int i = 0; i< wX; i++) nuG[i] = 0;
for (int i = 0, j = 1; i< PT.N; i++, j++)
{ int Eta = PT.CNext(); //Poisson variable
Console.Write(“{0,5}”, Eta);
if (j % 8 == 0) Console.WriteLine();
nuG[Eta]++; //counter of random variable
}
Console.WriteLine();
double spEta = 0.0; //Poisson probability sum
long snuEta = 0; //Poisson frequency sum
int snuG = 0; //frequency sum by generator
Console.Write(“Eta pC nuC”);
Console.WriteLine(“ cnuC nuDYG”);
for (int Eta = 0; Eta<= PT.cEta; Eta++)
{ Console.WriteLine(
“{0,2} {1,12:F10} {2,8} {3,8} {4,8}”,
Eta, PT.pC[Eta], PT.nuC[Eta],
PT.cnuC[Eta], nuG[Eta]);
spEta += PT.pC[Eta];
snuEta += PT.nuC[Eta];
snuG += nuG[Eta];
}
Console.Write(“Sum spC snuC”);
Console.WriteLine(“ snuDYG”);
Console.WriteLine(
“ {0,12:F10} {1,8} {2,8}”,
spEta, snuEta, snuG);
Console.ReadKey(); //result viewing
}
}
}
w = 7 N = 128
Alpha = 2.00
cEta = 6
1 6 3 1 3 1 1 2
2 1 0 2 0 2 3 3
3 2 1 4 2 3 0 0
0 4 2 1 3 0 1 2
1 1 5 2 0 1 2 3
3 2 1 4 1 3 4 0
0 4 2 1 2 0 1 1
1 1 4 2 5 1 2 2
2 2 1 3 1 2 4 5
5 3 2 1 2 5 1 1
1 0 3 2 4 1 2 2
2 2 1 3 1 2 3 4
4 3 2 0 2 4 0 1
1 0 3 1 4 1 2 2
2 1 0 3 1 2 3 3
3 3 2 0 2 3 0 1
Eta pC nuC cnuC nuDYG
0 0.1328125000 17 17 17
1 0.2734375000 35 52 35
2 0.2734375000 35 87 35
3 0.1796875000 23 110 23
4 0.0937500000 12 122 12
5 0.0390625000 5 127 5
6 0.0078125000 1 128 1
sum spC snuC snuDYG
1.0000000000 128 128
4. Discussion
using nsDeonYuliCPoissonTwist32D; //Poisson twister generator
//by technology of cumulative frequencies
namespace P060402
{ class cP060402
{ static void Main(string[] args)
{ cDeonYuliCPoissonTwist32D PT =
new cDeonYuliCPoissonTwist32D();
PT.SetW(32); //bit width of random variable
double Alpha = 2.0; //Alpha parameter
PT.CStart(Alpha); //start generator
Console.WriteLine(“w = {0} N = {1}”, PT.w, PT.N);
Console.WriteLine(“Alpha = {0:F2}”, Alpha);
double p1 = 1.0/(double)PT.N; //event probability
double m = 0.0; //mathematical expectation
double D = 0.0; //dispersion
for (long i = 0; i< PT.N; i++)
{ int Eta = PT.CNext(); //random variable
m += Eta * p1; //mathematical expectation
D += Eta * Eta * p1; //dispersion
}
D = D − m * m;
Console.WriteLine(“m = {0:F10}”, m);
Console.WriteLine(“D = {0:F10}”, D);
Console.ReadKey(); //result viewing
}
}
}
w = 32 N = 4294967296 Alpha = 2.00 m = 2.0000000014 D = 2.0000000116
5. Conclusions
Author Contributions
Funding
Acknowledgments
Conflicts of Interest
References
- Feller, W. An Introduction to Probability Theory and Its Applications, 3rd ed.; John Wiley & Sons: Hoboken, NJ, USA, 2008. [Google Scholar]
- Gnedenko, B. Theory of Probability, 6th ed.; CRC Press: Boca Raton, FL, USA, 1998; p. 520. [Google Scholar]
- Zhang, H.; Li, B. Characterizations of discrete compound poisson distribution. Commun. Stat.-Theory Method. 2016, 45, 6789–6802. [Google Scholar] [CrossRef]
- Guerriero, V. Power low distribution: method of multi-scale inferential statistics. J. Mod. Math. Front. 2012, 1, 21–28. [Google Scholar]
- Arkani, M.; Khalafi, H.; Vosoughi, N. A flexible multichannel digital random pulse generator based on FPGA. J. Nucl. Sci. Tech. 2013, 3, 109–116. [Google Scholar] [CrossRef][Green Version]
- Rasoanaivo, A.N.; Horowitz, W.A. Medium-induced radiation beyond the Poisson approximation. J. Phys. Conf. 2017, 878. [Google Scholar] [CrossRef]
- Veiga, A.; Spinelli, E. A pulse generator with Poisson-exponential distribution for emulation of radioactive decay events. In Proceedings of the IEEE 7th Latin American Symposium on Circuits & Systems (LASCAS), Florianopolis, Brazil, 28 February–2 March 2016; pp. 31–34. [Google Scholar] [CrossRef]
- Kirkpatrick, J.M.; Young, B.M. Poisson statistical methods for the analysis of low-count gamma spectra. IEEE Trans. Nucl. Sci. 2009, 56, 1278–1282. [Google Scholar] [CrossRef]
- Marsaglia, G.; Tsang, W.W.; Wang, J. Fast generation of discrete random variables. J. Stat. Software 2004, 11, 1–11. [Google Scholar] [CrossRef]
- Kumari, S.; Valarmathi, M.; Prince, S. Generation of pseudorandom binary sequence using shot noise for optical encryption. In Proceedings of the International Conference on Communication and Signal Processing (ICCSP), Melmaruvathur, India, 6–8 April 2016; pp. 0119–0122. [Google Scholar] [CrossRef]
- Hosamo, M. A Study of the Source Traffic Generator Using Poisson Distribution for ABR Service. Model. Simul. Eng. 2012, 2012, 1–6. [Google Scholar] [CrossRef]
- Zhang, H.; Liu, Y.; Li, B. Notes on discrete compound poisson model with applications to risk theory. Insur. Math. Econ. 2014, 59, 325–336. [Google Scholar] [CrossRef]
- Shanmugam, R. Informatics about fear to report rapes using bumped-up poisson model. Am. J. Biostat. 2013, 3, 17–29. [Google Scholar] [CrossRef]
- Menyaev, Y.A.; Nedosekin, D.A.; Sarimollaoglu, M.; Juratli, M.A.; Galanzha, E.I.; Tuchin, V.V.; Zharov, V.P. Optical clearing in photoacoustic flow cytometry. Biomed. Optic. Express 2013, 4, 3030–3041. [Google Scholar] [CrossRef] [PubMed]
- Menyaev, Y.A.; Carey, K.A.; Nedosekin, D.A.; Sarimollaoglu, M.; Galanzha, E.I.; Stumhofer, J.S.; Zharov, V.P. Preclinical photoacoustic models: application for ultrasensitive single cell malaria diagnosis in large vein and artery. Biomed. Optic. Express 2016, 7, 3643–3658. [Google Scholar] [CrossRef] [PubMed]
- Juratli, M.A.; Menyaev, Y.A.; Sarimollaoglu, M.; Melerzanov, A.V.; Nedosekin, D.A.; Culp, W.C.; Suen, J.Y.; Galanzha, E.I.; Zharov, V.P. Noninvasive label-free detection of circulating white and red blood clots in deep vessels with a focused photoacoustic prob. Biomed. Opt. Express 2018, 9, 5667–5677. [Google Scholar] [CrossRef] [PubMed]
- Sitek, A.; Celler, A.M. Limitations of Poisson statistics in describing radioactive decay. Phys. Med. 2015, 31, 1105–1107. [Google Scholar] [CrossRef] [PubMed]
- Menyaev, Y.A.; Zharov, V.P. Experience in development of therapeutic photomatrix equipment. Biomed. Eng. 2006, 40, 57–63. [Google Scholar] [CrossRef]
- Menyaev, Y.A.; Zharov, V.P. Experience in the use of therapeutic photomatrix equipment. Biomed. Eng. 2006, 40, 144–147. [Google Scholar] [CrossRef]
- Knuth, D.E. Art of Computer Programming, Volume 2: Seminumerical Algorithms, 3rd ed.; Addison-Wesle: Boston, MA, USA, 2014; p. 784. [Google Scholar]
- Knuth, D.E. Art of Computer Programming, Volume 4A: Combinatorial Algorithms, Part 1, 1st ed.; Addison-Wesley: Boston, MA, USA, 2011; p. 912. [Google Scholar]
- Wikipedia. Poisson Distribution. Available online: https://en.wikipedia.org/wiki/Poisson_distribution (accessed on 26 May 2019).
- Kolmogorov, A.N.; Fomin, S.V. Elements of the Theory of Functions and Functional Analysis; Dover Publication: Mineola, NY, USA, 1974; p. 128. [Google Scholar]
- Deon, A.F.; Menyaev, Y.A. The Complete Set Simulation of Stochastic Sequences without Repeated and Skipped Elements. J. Univers. Comput. Sci. 2016, 22, 1023–1047. [Google Scholar] [CrossRef]
- Deon, A.F.; Menyaev, Y.A. Parametrical tuning of twisting generators. J. Comput. Sci. 2016, 12, 363–378. [Google Scholar] [CrossRef]
- Deon, A.F.; Menyaev, Y.A. Twister generator of arbitrary uniform sequences. J. Univers. Comput. Sci. 2017, 23, 353–384. [Google Scholar] [CrossRef]
- Deon, A.F.; Menyaev, Y.A. Uniform twister plane generator. J. Comput. Sci. 2018, 14, 260–272. [Google Scholar] [CrossRef][Green Version]
- Wikipedia. Diehard Tests. Available online: https://en.wikipedia.org/wiki/Diehard_tests (accessed on 26 May 2019).
- The Marsaglia Random Number CDROM Including the Diehard Battery of Tests of Randomness. Available online: https://stat.fsu.edu/pub/diehard/ (accessed on 26 May 2019).
- Runs Test for Detecting Non-randomness. Available online: https://www.itl.nist.gov/div898/handbook/eda/section3/eda35d.htm (accessed on 26 May 2019).
- Sample 33092: Wald-Wolfowitz (or Runs) Test for Randomness. Available online: https://support.sas.com/kb/33/092.html (accessed on 26 May 2019).
- Alhakim, A.; Hooper, W. A non-parametric test for several independent samples. J. Nonparametric Stat. 2008, 20, 253–261. [Google Scholar] [CrossRef]
© 2019 by the authors. Licensee MDPI, Basel, Switzerland. This article is an open access article distributed under the terms and conditions of the Creative Commons Attribution (CC BY) license (http://creativecommons.org/licenses/by/4.0/).
Share and Cite
Deon, A.F.; Menyaev, Y.A. Poisson Twister Generator by Cumulative Frequency Technology. Algorithms 2019, 12, 114. https://doi.org/10.3390/a12060114
Deon AF, Menyaev YA. Poisson Twister Generator by Cumulative Frequency Technology. Algorithms. 2019; 12(6):114. https://doi.org/10.3390/a12060114
Chicago/Turabian StyleDeon, Aleksei F., and Yulian A. Menyaev. 2019. "Poisson Twister Generator by Cumulative Frequency Technology" Algorithms 12, no. 6: 114. https://doi.org/10.3390/a12060114
APA StyleDeon, A. F., & Menyaev, Y. A. (2019). Poisson Twister Generator by Cumulative Frequency Technology. Algorithms, 12(6), 114. https://doi.org/10.3390/a12060114

