FLImaging 7.8.25.3
XorshiroRandomGeneratorStatic.h
1#pragma once
10
12namespace FLImaging
13{
15 namespace ImageProcessing
16 {
18
25 class FL_EXPORT CXorshiroRandomGeneratorStatic : public Base::CFLBase
26 {
27 public:
28
42 static void GenerateUniformRandomValuesU32(Base::CFLArray<uint32_t> &flaRandom, int64_t i64Count, uint32_t u32Min = 0, uint32_t u32Max = UINT32_MAX);
43
57 static void GenerateUniformRandomValuesI32(Base::CFLArray<int32_t> &flaRandom, int64_t i64Count, int32_t i32Min = INT32_MIN, int32_t i32Max = INT32_MAX);
58
72 static void GenerateUniformRandomValuesF32(Base::CFLArray<float> &flaRandom, int64_t i64Count, float f32Min = 0, float f32Max = 1);
73
87 static void GenerateUniformRandomValuesF64(Base::CFLArray<double> &flaRandom, int64_t i64Count, double f64Min = 0, double f64Max = 1);
88
102 static void GenerateNormalRandomValuesF32(Base::CFLArray<float> &flaRandom, int64_t i64Count, float f32Mean = 0, float f32Stdev = 1);
103
117 static void GenerateNormalRandomValuesF64(Base::CFLArray<double> &flaRandom, int64_t i64Count, double f64Mean = 0, double f64Stdev = 1);
118
127
137 static uint32_t GenerateUniformRandomValueU32(uint64_t u64Seed);
138
148 static uint32_t GenerateUniformRandomValueU32(uint32_t arrU32State[2]);
149
161 static uint32_t GenerateUniformRandomValueU32(uint32_t u32Min, uint32_t u32Max);
162
176 static uint32_t GenerateUniformRandomValueU32(uint32_t u32Min, uint32_t u32Max, uint64_t u64Seed);
177
191 static uint32_t GenerateUniformRandomValueU32(uint32_t u32Min, uint32_t u32Max, uint32_t arrU32State[2]);
192
204 static int32_t GenerateUniformRandomValueI32(int32_t i32Min, int32_t i32Max);
205
219 static int32_t GenerateUniformRandomValueI32(int32_t i32Min, int32_t i32Max, uint64_t u64Seed);
220
234 static int32_t GenerateUniformRandomValueI32(int32_t i32Min, int32_t i32Max, uint32_t arrU32State[2]);
235
244
256 static float GenerateUniformRandomValueF32(float f32Min, float f32Max);
257
271 static float GenerateUniformRandomValueF32(float f32Min, float f32Max, uint64_t u64Seed);
272
286 static float GenerateUniformRandomValueF32(float f32Min, float f32Max, uint32_t arrU32State[2]);
287
296
305
315 static float GenerateStandardNormalRandomValueF32(uint64_t u64Seed);
316
326 static float GenerateStandardNormalRandomValueF32(float &f32StdNormal2nd);
327
337 static float GenerateStandardNormalRandomValueF32(uint32_t arrU32State[2]);
338
350 static float GenerateStandardNormalRandomValueF32(uint32_t arrU32State[2], float &f32StdNormal2nd);
351
363 static float GenerateNormalRandomValueF32(float f32Mean = 0.f, float f32Stdev = 1.f);
364
378 static float GenerateNormalRandomValueF32(float f32Mean, float f32Stdev, uint64_t u64Seed);
379
393 static float GenerateNormalRandomValueF32(float f32Mean, float f32Stdev, float &f32Normal2nd);
394
408 static float GenerateNormalRandomValueF32(float f32Mean, float f32Stdev, uint32_t arrU32State[2]);
409
425 static float GenerateNormalRandomValueF32(float f32Mean, float f32Stdev, uint32_t arrU32State[2], float &f32Normal2nd);
426
437
448
459
470
481
492
501
511 static uint64_t GenerateUniformRandomValueU64(uint64_t u64Seed);
512
522 static uint64_t GenerateUniformRandomValueU64(uint64_t arrU64State[2]);
523
535 static uint64_t GenerateUniformRandomValueU64(uint64_t u64Min, uint64_t u64Max);
536
550 static uint64_t GenerateUniformRandomValueU64(uint64_t u64Min, uint64_t u64Max, uint64_t u64Seed);
551
565 static uint64_t GenerateUniformRandomValueU64(uint64_t u64Min, uint64_t u64Max, uint64_t arrU64State[2]);
566
578 static int64_t GenerateUniformRandomValueI64(int64_t i64Min, int64_t i64Max);
579
593 static int64_t GenerateUniformRandomValueI64(int64_t i64Min, int64_t i64Max, uint64_t u64Seed);
594
608 static int64_t GenerateUniformRandomValueI64(int64_t i64Min, int64_t i64Max, uint64_t arrU64State[2]);
609
618
630 static double GenerateUniformRandomValueF64(double f64Min, double f64Max);
631
645 static double GenerateUniformRandomValueF64(double f64Min, double f64Max, uint64_t u64Seed);
646
660 static double GenerateUniformRandomValueF64(double f64Min, double f64Max, uint64_t arrU64State[2]);
661
670
679
689 static double GenerateStandardNormalRandomValueF64(uint64_t u64Seed);
690
700 static double GenerateStandardNormalRandomValueF64(double &f64StdNormal2nd);
701
711 static double GenerateStandardNormalRandomValueF64(uint64_t arrU64State[2]);
712
724 static double GenerateStandardNormalRandomValueF64(uint64_t arrU64State[2], double &f64StdNormal2nd);
725
737 static double GenerateNormalRandomValueF64(double f64Mean = 0., double f64Stdev = 1.);
738
752 static double GenerateNormalRandomValueF64(double f64Mean, double f64Stdev, uint64_t u64Seed);
753
767 static double GenerateNormalRandomValueF64(double f64Mean, double f64Stdev, double &f64Normal2nd);
768
782 static double GenerateNormalRandomValueF64(double f64Mean, double f64Stdev, uint64_t arrU64State[2]);
783
799 static double GenerateNormalRandomValueF64(double f64Mean, double f64Stdev, uint64_t arrU64State[2], double &f64Normal2nd);
800
811
822
833
844
855
866
878 static uint64_t GenerateBinomialRandomValueU64(uint64_t u64SamplingCount, double f64Probability);
879
884 static void Seed(uint64_t u64Seed = 0x9d84a3d390df0c46);
885
890 static void Initialize();
891
901 static void InitializeExternalState32(uint32_t arrU32State[2], uint64_t u64Seed);
902
912 static void InitializeExternalState64(uint64_t arrU64State[2], uint64_t u64Seed);
913
921 static void SetInternalState32(const uint32_t arrU32State[2]);
922
930 static void SetInternalState64(const uint64_t arrU64State[2]);
931
939 static void GetInternalState32(uint32_t arrU32State[2]);
940
948 static void GetInternalState64(uint64_t arrU64State[2]);
953 static void Jump32();
954
962 static void Jump32(uint32_t arrU32State[2]);
963
968 static void Jump64();
969
977 static void Jump64(uint64_t arrU64State[2]);
978
979 private:
980 CXorshiroRandomGeneratorStatic();
981
982 static CXorshiroRandomGenerator& GetInternal();
983 };
984 }
985}
Template type array class.
Definition FLArray.h:71
Top-level base class of FLImaging.
Definition FLBase.h:36
Simplified class representing a 3-D point.
Definition TPoint3.h:37
Simplified class representing a point.
Definition TPoint.h:37
A pseudo random number generator A 32/64bit PRNG based on Xoroshiro64** /Xoroshiro128++ methods.
Definition XorshiroRandomGenerator.h:24
static float GenerateStandardNormalRandomValueF32(uint32_t arrU32State[2])
static Base::TPoint< double > GenerateUniformRandomPointInDiscF64(double f64Radius)
static uint64_t GenerateUniformRandomValueU64(uint64_t arrU64State[2])
static double GenerateNormalRandomValueF64(double f64Mean, double f64Stdev, uint64_t arrU64State[2])
static float GenerateStandardNormalRandomValueF32(float &f32StdNormal2nd)
static void GetInternalState32(uint32_t arrU32State[2])
static double GenerateNormalRandomValueF64(double f64Mean, double f64Stdev, uint64_t u64Seed)
static uint64_t GenerateUniformRandomValueU64(uint64_t u64Seed)
static void GetInternalState64(uint64_t arrU64State[2])
static uint64_t GenerateUniformRandomValueU64(uint64_t u64Min, uint64_t u64Max)
static double GenerateNormalRandomValueF64(double f64Mean, double f64Stdev, uint64_t arrU64State[2], double &f64Normal2nd)
static void InitializeExternalState32(uint32_t arrU32State[2], uint64_t u64Seed)
static float GenerateUniformRandomValueF32(float f32Min, float f32Max, uint64_t u64Seed)
static double GenerateNormalRandomValueF64(double f64Mean, double f64Stdev, double &f64Normal2nd)
static void GenerateNormalRandomValuesF64(Base::CFLArray< double > &flaRandom, int64_t i64Count, double f64Mean=0, double f64Stdev=1)
static double GenerateStandardNormalRandomValueF64(uint64_t arrU64State[2], double &f64StdNormal2nd)
static int64_t GenerateUniformRandomValueI64(int64_t i64Min, int64_t i64Max, uint64_t u64Seed)
static uint32_t GenerateUniformRandomValueU32(uint32_t u32Min, uint32_t u32Max)
static Base::TPoint3< double > GenerateUniformRandomPointOnUnitSphereF64()
static Base::TPoint3< double > GenerateUniformRandomPointInUnitBallF64()
static double GenerateUniformRandomValueF64(double f64Min, double f64Max, uint64_t arrU64State[2])
static uint32_t GenerateUniformRandomValueU32(uint64_t u64Seed)
static void GenerateUniformRandomValuesU32(Base::CFLArray< uint32_t > &flaRandom, int64_t i64Count, uint32_t u32Min=0, uint32_t u32Max=UINT32_MAX)
static double GenerateUniformRandomValueF64(double f64Min, double f64Max)
static int32_t GenerateUniformRandomValueI32(int32_t i32Min, int32_t i32Max)
static uint32_t GenerateUniformRandomValueU32(uint32_t u32Min, uint32_t u32Max, uint64_t u64Seed)
static float GenerateStandardNormalRandomValueF32(uint64_t u64Seed)
static Base::TPoint< double > GenerateUniformRandomPointInUnitTriangleF64()
static float GenerateUniformRandomValueF32(float f32Min, float f32Max)
static float GenerateNormalRandomValueF32(float f32Mean, float f32Stdev, uint64_t u64Seed)
static float GenerateUniformRandomValueF32(float f32Min, float f32Max, uint32_t arrU32State[2])
static float GenerateStandardNormalRandomValueF32(uint32_t arrU32State[2], float &f32StdNormal2nd)
static void GenerateNormalRandomValuesF32(Base::CFLArray< float > &flaRandom, int64_t i64Count, float f32Mean=0, float f32Stdev=1)
static Base::TPoint3< double > GenerateUniformRandomPointInUnitTetrahedronF64()
static uint64_t GenerateUniformRandomValueU64(uint64_t u64Min, uint64_t u64Max, uint64_t u64Seed)
static void InitializeExternalState64(uint64_t arrU64State[2], uint64_t u64Seed)
static uint64_t GenerateUniformRandomValueU64(uint64_t u64Min, uint64_t u64Max, uint64_t arrU64State[2])
static Base::TPoint< float > GenerateUniformRandomPointInUnitDiscF32()
static Base::TPoint< float > GenerateUniformRandomPointInUnitTriangleF32()
static int32_t GenerateUniformRandomValueI32(int32_t i32Min, int32_t i32Max, uint32_t arrU32State[2])
static Base::TPoint< float > GenerateUniformRandomPointInDiscF32(float f32Radius)
static uint64_t GenerateBinomialRandomValueU64(uint64_t u64SamplingCount, double f64Probability)
static double GenerateStandardNormalRandomValueF64(double &f64StdNormal2nd)
static void GenerateUniformRandomValuesF32(Base::CFLArray< float > &flaRandom, int64_t i64Count, float f32Min=0, float f32Max=1)
static void Seed(uint64_t u64Seed=0x9d84a3d390df0c46)
static uint32_t GenerateUniformRandomValueU32(uint32_t arrU32State[2])
static Base::TPoint3< float > GenerateUniformRandomPointInUnitBallF32()
static double GenerateNormalRandomValueF64(double f64Mean=0., double f64Stdev=1.)
static double GenerateStandardNormalRandomValueF64(uint64_t arrU64State[2])
static int64_t GenerateUniformRandomValueI64(int64_t i64Min, int64_t i64Max, uint64_t arrU64State[2])
static void SetInternalState64(const uint64_t arrU64State[2])
static double GenerateStandardNormalRandomValueF64(uint64_t u64Seed)
static void SetInternalState32(const uint32_t arrU32State[2])
static float GenerateNormalRandomValueF32(float f32Mean, float f32Stdev, uint32_t arrU32State[2], float &f32Normal2nd)
static void GenerateUniformRandomValuesI32(Base::CFLArray< int32_t > &flaRandom, int64_t i64Count, int32_t i32Min=INT32_MIN, int32_t i32Max=INT32_MAX)
static Base::TPoint3< float > GenerateUniformRandomPointOnUnitSphereF32()
static void GenerateUniformRandomValuesF64(Base::CFLArray< double > &flaRandom, int64_t i64Count, double f64Min=0, double f64Max=1)
static float GenerateNormalRandomValueF32(float f32Mean=0.f, float f32Stdev=1.f)
static float GenerateNormalRandomValueF32(float f32Mean, float f32Stdev, uint32_t arrU32State[2])
static Base::TPoint3< float > GenerateUniformRandomPointInUnitTetrahedronF32()
static uint32_t GenerateUniformRandomValueU32(uint32_t u32Min, uint32_t u32Max, uint32_t arrU32State[2])
static int64_t GenerateUniformRandomValueI64(int64_t i64Min, int64_t i64Max)
static Base::TPoint< double > GenerateUniformRandomPointInUnitDiscF64()
static double GenerateUniformRandomValueF64(double f64Min, double f64Max, uint64_t u64Seed)
static int32_t GenerateUniformRandomValueI32(int32_t i32Min, int32_t i32Max, uint64_t u64Seed)
static float GenerateNormalRandomValueF32(float f32Mean, float f32Stdev, float &f32Normal2nd)
Definition AbsoluteThreshold.h:25