FLImaging 7.10.21.1
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
30
43 static void GenerateUniformRandomValuesU32(Base::CFLArray<uint32_t> &flaRandom, int64_t i64Count, uint32_t u32Min = 0, uint32_t u32Max = UINT32_MAX);
44 static void GenerateUniformRandomValuesI32(Base::CFLArray<int32_t> &flaRandom, int64_t i64Count, int32_t i32Min = INT32_MIN, int32_t i32Max = INT32_MAX);
45 static void GenerateUniformRandomValuesF32(Base::CFLArray<float> &flaRandom, int64_t i64Count, float f32Min = 0, float f32Max = 1);
46 static void GenerateUniformRandomValuesF64(Base::CFLArray<double> &flaRandom, int64_t i64Count, double f64Min = 0, double f64Max = 1);
48
50
63 static void GenerateUniformRandomValuesU32(uint32_t* pU32Random, int64_t i64Count, uint32_t u32Min = 0, uint32_t u32Max = UINT32_MAX);
64 static void GenerateUniformRandomValuesI32(int32_t* pI32Random, int64_t i64Count, int32_t i32Min = INT32_MIN, int32_t i32Max = INT32_MAX);
65 static void GenerateUniformRandomValuesF32(float* pF32Random, int64_t i64Count, float f32Min = 0, float f32Max = 1);
66 static void GenerateUniformRandomValuesF64(double* pF64Random, int64_t i64Count, double f64Min = 0, double f64Max = 1);
68
70
83 static void GenerateNormalRandomValuesF32(Base::CFLArray<float> &flaRandom, int64_t i64Count, float f32Mean = 0, float f32Stdev = 1);
84 static void GenerateNormalRandomValuesF64(Base::CFLArray<double> &flaRandom, int64_t i64Count, double f64Mean = 0, double f64Stdev = 1);
86
88
101 static void GenerateNormalRandomValuesF32(float* pF32Random, int64_t i64Count, float f32Mean = 0, float f32Stdev = 1);
102 static void GenerateNormalRandomValuesF64(double* pF64Random, int64_t i64Count, double f64Mean = 0, double f64Stdev = 1);
104
113
123 static uint32_t GenerateUniformRandomValueU32(uint64_t u64Seed);
124
134 static uint32_t GenerateUniformRandomValueU32(uint32_t arrU32State[2]);
135
147 static uint32_t GenerateUniformRandomValueU32(uint32_t u32Min, uint32_t u32Max);
148
162 static uint32_t GenerateUniformRandomValueU32(uint32_t u32Min, uint32_t u32Max, uint64_t u64Seed);
163
177 static uint32_t GenerateUniformRandomValueU32(uint32_t u32Min, uint32_t u32Max, uint32_t arrU32State[2]);
178
190 static int32_t GenerateUniformRandomValueI32(int32_t i32Min, int32_t i32Max);
191
205 static int32_t GenerateUniformRandomValueI32(int32_t i32Min, int32_t i32Max, uint64_t u64Seed);
206
220 static int32_t GenerateUniformRandomValueI32(int32_t i32Min, int32_t i32Max, uint32_t arrU32State[2]);
221
230
242 static float GenerateUniformRandomValueF32(float f32Min, float f32Max);
243
257 static float GenerateUniformRandomValueF32(float f32Min, float f32Max, uint64_t u64Seed);
258
272 static float GenerateUniformRandomValueF32(float f32Min, float f32Max, uint32_t arrU32State[2]);
273
282
291
301 static float GenerateStandardNormalRandomValueF32(uint64_t u64Seed);
302
312 static float GenerateStandardNormalRandomValueF32(float &f32StdNormal2nd);
313
323 static float GenerateStandardNormalRandomValueF32(uint32_t arrU32State[2]);
324
336 static float GenerateStandardNormalRandomValueF32(uint32_t arrU32State[2], float &f32StdNormal2nd);
337
349 static float GenerateNormalRandomValueF32(float f32Mean = 0.f, float f32Stdev = 1.f);
350
364 static float GenerateNormalRandomValueF32(float f32Mean, float f32Stdev, uint64_t u64Seed);
365
379 static float GenerateNormalRandomValueF32(float f32Mean, float f32Stdev, float &f32Normal2nd);
380
394 static float GenerateNormalRandomValueF32(float f32Mean, float f32Stdev, uint32_t arrU32State[2]);
395
411 static float GenerateNormalRandomValueF32(float f32Mean, float f32Stdev, uint32_t arrU32State[2], float &f32Normal2nd);
412
423
434
445
456
467
478
487
497 static uint64_t GenerateUniformRandomValueU64(uint64_t u64Seed);
498
508 static uint64_t GenerateUniformRandomValueU64(uint64_t arrU64State[2]);
509
521 static uint64_t GenerateUniformRandomValueU64(uint64_t u64Min, uint64_t u64Max);
522
536 static uint64_t GenerateUniformRandomValueU64(uint64_t u64Min, uint64_t u64Max, uint64_t u64Seed);
537
551 static uint64_t GenerateUniformRandomValueU64(uint64_t u64Min, uint64_t u64Max, uint64_t arrU64State[2]);
552
564 static int64_t GenerateUniformRandomValueI64(int64_t i64Min, int64_t i64Max);
565
579 static int64_t GenerateUniformRandomValueI64(int64_t i64Min, int64_t i64Max, uint64_t u64Seed);
580
594 static int64_t GenerateUniformRandomValueI64(int64_t i64Min, int64_t i64Max, uint64_t arrU64State[2]);
595
604
616 static double GenerateUniformRandomValueF64(double f64Min, double f64Max);
617
631 static double GenerateUniformRandomValueF64(double f64Min, double f64Max, uint64_t u64Seed);
632
646 static double GenerateUniformRandomValueF64(double f64Min, double f64Max, uint64_t arrU64State[2]);
647
656
665
675 static double GenerateStandardNormalRandomValueF64(uint64_t u64Seed);
676
686 static double GenerateStandardNormalRandomValueF64(double &f64StdNormal2nd);
687
697 static double GenerateStandardNormalRandomValueF64(uint64_t arrU64State[2]);
698
710 static double GenerateStandardNormalRandomValueF64(uint64_t arrU64State[2], double &f64StdNormal2nd);
711
723 static double GenerateNormalRandomValueF64(double f64Mean = 0., double f64Stdev = 1.);
724
738 static double GenerateNormalRandomValueF64(double f64Mean, double f64Stdev, uint64_t u64Seed);
739
753 static double GenerateNormalRandomValueF64(double f64Mean, double f64Stdev, double &f64Normal2nd);
754
768 static double GenerateNormalRandomValueF64(double f64Mean, double f64Stdev, uint64_t arrU64State[2]);
769
785 static double GenerateNormalRandomValueF64(double f64Mean, double f64Stdev, uint64_t arrU64State[2], double &f64Normal2nd);
786
797
808
819
830
841
852
864 static uint64_t GenerateBinomialRandomValueU64(uint64_t u64SamplingCount, double f64Probability);
865
870 static void Seed(uint64_t u64Seed = 0x9d84a3d390df0c46);
871
876 static void Initialize();
877
887 static void InitializeExternalState32(uint32_t arrU32State[2], uint64_t u64Seed);
888
898 static void InitializeExternalState64(uint64_t arrU64State[2], uint64_t u64Seed);
899
907 static void SetInternalState32(const uint32_t arrU32State[2]);
908
916 static void SetInternalState64(const uint64_t arrU64State[2]);
917
925 static void GetInternalState32(uint32_t arrU32State[2]);
926
934 static void GetInternalState64(uint64_t arrU64State[2]);
939 static void Jump32();
940
948 static void Jump32(uint32_t arrU32State[2]);
949
954 static void Jump64();
955
963 static void Jump64(uint64_t arrU64State[2]);
964
965 private:
966 CXorshiroRandomGeneratorStatic();
967
968 static CXorshiroRandomGenerator& GetInternal();
969 };
970 }
971}
Template type array class.
Definition FLArray.h:71
Top-level base class of FLImaging.
Definition FLImagingBase/FLBase.h:36
Simplified class representing a 3-D point.
Definition FLImagingBase/TPoint3.h:37
Simplified class representing a point.
Definition FLImagingBase/TPoint.h:37
A pseudo random number generator A 32/64bit PRNG based on Xoroshiro64** /Xoroshiro128++ methods.
Definition FLImagingImgProcBase/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 void GenerateUniformRandomValuesU32(uint32_t *pU32Random, int64_t i64Count, uint32_t u32Min=0, uint32_t u32Max=UINT32_MAX)
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 void GenerateNormalRandomValuesF64(double *pF64Random, int64_t i64Count, double f64Mean=0, double f64Stdev=1)
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 void GenerateUniformRandomValuesF64(double *pF64Random, int64_t i64Count, double f64Min=0, double f64Max=1)
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 void GenerateUniformRandomValuesI32(int32_t *pI32Random, int64_t i64Count, int32_t i32Min=INT32_MIN, int32_t i32Max=INT32_MAX)
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 void GenerateNormalRandomValuesF32(float *pF32Random, int64_t i64Count, float f32Mean=0, float f32Stdev=1)
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 void GenerateUniformRandomValuesF32(float *pF32Random, int64_t i64Count, float f32Min=0, float f32Max=1)
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 FLImagingImgProcBase/AbsoluteThreshold.h:25