Permalink
Browse files

*** empty log message ***

  • Loading branch information...
1 parent c649ca4 commit d70351d50a6703604843c10f8cc36715f65cef5e langmead committed Dec 11, 2009
Showing with 51 additions and 1 deletion.
  1. +3 −1 random_source.h
  2. +48 −0 random_test.cpp
View
@@ -1,6 +1,8 @@
#ifndef RANDOM_GEN_H_
#define RANDOM_GEN_H_
+#include "assert_helpers.h"
+
/**
* Simple pseudo-random linear congruential generator, a la Numerical
* Recipes.
@@ -26,7 +28,7 @@ class RandomSource {
last = a * last + c;
ret = last >> 16;
last = a * last + c;
- ret |= last;
+ ret ^= last;
lastOff = 0;
return ret;
}
View
@@ -0,0 +1,48 @@
+/*
+ * random_test.cpp
+ *
+ * Created on: Dec 11, 2009
+ * Author: Ben Langmead
+ */
+
+#include <iostream>
+#include <string.h>
+#include "random_source.h"
+
+using namespace std;
+
+int main(void) {
+ RandomSource rand;
+ rand.init(0);
+ uint32_t ts[32];
+ memset(ts, 0, 32*sizeof(uint32_t));
+ uint32_t r = rand.nextU32();
+ cout << "Without reseeding:" << endl;
+ for(int i = 0; i < 10000; i++) {
+ uint32_t nr = rand.nextU32();
+ for(int j = 0; j < 32; j++) {
+ if(((r >> j) & 1) != ((nr >> j) & 1)) {
+ ts[j]++;
+ }
+ }
+ }
+ for(int j = 0; j < 32; j++) {
+ cout << ts[j] << endl;
+ }
+ memset(ts, 0, 32*sizeof(uint32_t));
+ rand.init(0);
+ r = rand.nextU32();
+ cout << "With reseeding:" << endl;
+ for(int i = 0; i < 10000; i++) {
+ rand.init(i+1);
+ uint32_t nr = rand.nextU32();
+ for(int j = 0; j < 32; j++) {
+ if(((r >> j) & 1) != ((nr >> j) & 1)) {
+ ts[j]++;
+ }
+ }
+ }
+ for(int j = 0; j < 32; j++) {
+ cout << ts[j] << endl;
+ }
+}

0 comments on commit d70351d

Please sign in to comment.