aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/math/je_random.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin/math/je_random.cpp')
-rw-r--r--src/libjin/math/je_random.cpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/libjin/math/je_random.cpp b/src/libjin/math/je_random.cpp
new file mode 100644
index 0000000..216fd79
--- /dev/null
+++ b/src/libjin/math/je_random.cpp
@@ -0,0 +1,52 @@
+#include <math.h>
+#include "je_random.h"
+
+namespace JinEngine
+{
+ namespace Math
+ {
+
+ RandomGenerator::RandomGenerator(uint32 seed)
+ : mSeed(seed)
+ {
+ }
+
+ uint32 RandomGenerator::rand()
+ {
+ unsigned int next = mSeed;
+ uint32 result;
+
+ next *= 1103515245;
+ next += 12345;
+ result = (unsigned int)(next / 65536) % 2048;
+
+ next *= 1103515245;
+ next += 12345;
+ result <<= 10;
+ result ^= (unsigned int)(next / 65536) % 1024;
+
+ next *= 1103515245;
+ next += 12345;
+ result <<= 10;
+ result ^= (unsigned int)(next / 65536) % 1024;
+
+ mSeed = next;
+
+ return result;
+ }
+
+ uint32 RandomGenerator::rand(uint32 min, uint32 max)
+ {
+ uint32 n = rand();
+ return n % (max - min + 1) + min;
+ }
+
+ float RandomGenerator::randf(float min, float max, int ac)
+ {
+ uint32 a = pow(10.f, ac);
+ uint32 n = rand(min*a, max*a);
+ return (float)n / a;
+ }
+
+ }
+} \ No newline at end of file