diff --git a/randomgen.cpp b/randomgen.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..4219ccec4193573721825fcf1bca881a9e043c0d
--- /dev/null
+++ b/randomgen.cpp
@@ -0,0 +1,25 @@
+#include "randomgen.h"
+#include <assert.h>
+#include <cstddef>
+#include <cstdint>
+#include <random>
+
+static std::default_random_engine randomEngine;
+static std::uniform_real_distribution<double> dist(0, 1);
+static std::uniform_int_distribution<size_t> distSt(0, SIZE_MAX);
+
+double rd::rand(double max)
+{
+	return dist(randomEngine)*max;
+}
+
+size_t rd::uid()
+{
+	return distSt(randomEngine);
+}
+
+void rd::init()
+{
+	std::random_device randomDevice;
+	randomEngine.seed(randomDevice());
+}
diff --git a/randomgen.h b/randomgen.h
new file mode 100644
index 0000000000000000000000000000000000000000..014bf98eabc8b1da9ade57ae6167b559d4ecb582
--- /dev/null
+++ b/randomgen.h
@@ -0,0 +1,12 @@
+#pragma once
+
+#include <cstddef>
+
+namespace rd
+{
+
+double rand(double max = 1);
+void init();
+size_t uid();
+
+}