From dec32e1516a05db805ff75a9e016e8bea04d1d8e Mon Sep 17 00:00:00 2001 From: Gertjan van den Burg Date: Thu, 30 Jul 2015 16:07:50 +0200 Subject: name change to SyncRNG and documentation in the .c file --- taus.c | 189 ----------------------------------------------------------------- 1 file changed, 189 deletions(-) delete mode 100644 taus.c (limited to 'taus.c') diff --git a/taus.c b/taus.c deleted file mode 100644 index 9eba229..0000000 --- a/taus.c +++ /dev/null @@ -1,189 +0,0 @@ -#ifdef TARGETPYTHON -#include "Python.h" -#endif - -#ifndef TARGETPYTHON -#define STRICT_R_HEADERS -#include -#include -#include -#include -#endif - -int lfsr113(int **state) -{ - unsigned long z1, z2, z3, z4, b; - - z1 = (*state)[0]; - z2 = (*state)[1]; - z3 = (*state)[2]; - z4 = (*state)[3]; - - b = (((z1 << 6) ^ z1) >> 13); - z1 = (((z1 & 4294967294) << 18) ^ b); - - b = (((z2 << 2) ^ z2) >> 27); - z2 = (((z2 & 4294967288) << 2) ^ b); - - b = (((z3 << 13) ^ z3) >> 21); - z3 = (((z3 & 4294967280) << 7) ^ b); - - b = (((z4 << 3) ^ z4) >> 12); - z4 = (((z4 & 4294967168) << 13) ^ b); - - b = (z1 ^ z2 ^ z3 ^ z4); - - (*state)[0] = z1 & 0x7FFFFFFF; - (*state)[1] = z2 & 0x7FFFFFFF; - (*state)[2] = z3 & 0x7FFFFFFF; - (*state)[3] = z4 & 0x7FFFFFFF; - b = b & 0x7FFFFFFF; - - return(b); -} - -void lfsr113_seed(unsigned long seed, int **state) -{ - unsigned long z1 = 2, - z2 = 8, - z3 = 16, - z4 = 128; - - z1 = (z1 * (seed + 1)) & 0x7FFFFFFF; - z2 = (z2 * (seed + 1)) & 0x7FFFFFFF; - z3 = (z3 * (seed + 1)) & 0x7FFFFFFF; - z4 = (z4 * (seed + 1)) & 0x7FFFFFFF; - - if (*state == NULL) { - (*state) = malloc(sizeof(int)*4); - } - - (*state)[0] = (int) z1; - (*state)[1] = (int) z2; - (*state)[2] = (int) z3; - (*state)[3] = (int) z4; -} - -#ifdef TARGETPYTHON -/* - * - * Start of Python code - * - */ - -static char module_docstring[] = -"This module provides the Tausworthe RNG for R and Python simultaneously"; - -static PyObject *taus_seed(PyObject *self, PyObject *args) -{ - int seed, *state = NULL; - - if (!PyArg_ParseTuple(args, "i", &seed)) - return NULL; - - lfsr113_seed(seed, &state); - PyObject *pystate = Py_BuildValue("[i, i, i, i]", - state[0], state[1], state[2], state[3]); - free(state); - return pystate; -} - -static PyObject *taus_rand(PyObject *self, PyObject *args) -{ - int i, value, numints, *localstate; - - PyObject *listObj; - PyObject *intObj; - - if (!PyArg_ParseTuple(args, "O!", &PyList_Type, &listObj)) - return NULL; - - // we're just assuming you would never pass more than 4 values - localstate = malloc(sizeof(int)*5); - numints = PyList_Size(listObj); - for (i=0; i