Mac binaries
[jabaws.git] / website / archive / binaries / mac / src / clustalw / src / tree / RandomGenerator.cpp
diff --git a/website/archive/binaries/mac/src/clustalw/src/tree/RandomGenerator.cpp b/website/archive/binaries/mac/src/clustalw/src/tree/RandomGenerator.cpp
new file mode 100644 (file)
index 0000000..6cf7eec
--- /dev/null
@@ -0,0 +1,65 @@
+/**
+ * Author: Mark Larkin
+ * 
+ * Copyright (c) 2007 Des Higgins, Julie Thompson and Toby Gibson.  
+ */
+#ifdef HAVE_CONFIG_H
+    #include "config.h"
+#endif
+#include "RandomGenerator.h"
+
+namespace clustalw
+{
+
+/**
+ * The contructor initialises the random algorithm.
+ * @param s 
+ * @return 
+ */
+RandomGenerator::RandomGenerator(unsigned long s)
+ : m(100000000), m1(10000)
+{
+    a[0] = s;
+    j = 0;
+    do
+    {
+        ++j;
+        a[j] = (mult(31, a[j - 1]) + 1) % m;
+    }
+    while (j < 54);
+}
+
+/**
+ * additive congruential method.
+ * @param r 
+ * @return unsigned long random number in the range 0 to r-1
+ */
+unsigned long RandomGenerator::addRand(unsigned long r)
+{
+    int x, y;
+    j = (j + 1) % 55;
+    x = (j + 23) % 55;
+    y = (j + 54) % 55;
+    a[j] = (a[x] + a[y]) % m;
+
+    return (((a[j] / m1) *r) / m1);
+}
+
+/**
+ * 
+ * @param p 
+ * @param q 
+ * @return 
+ */
+unsigned long RandomGenerator::mult(unsigned long p, unsigned long q)
+{
+    unsigned long p1, p0, q1, q0;
+
+    p1 = p / m1;
+    p0 = p % m1;
+    q1 = q / m1;
+    q0 = q % m1;
+    return ((((p0 *q1 + p1 * q0) % m1) *m1 + p0 * q0) % m);
+}
+
+}