--- mtwist.c.orig 2014-01-24 06:11:42.364027733 +0100
+++ mtwist.c 2017-08-21 21:17:27.694337383 +0200
@@ -4,8 +4,10 @@
#else
#define ATTRIBUTE(attrs)
#endif
+/*
static char Rcs_Id[] ATTRIBUTE((used)) =
"$Id: mtwist.c,v 1.28 2014-01-23 21:11:42-08 geoff Exp $";
+*/
#endif
/*
@@ -308,8 +310,10 @@
*/
double mt_32_to_double;
/* Multiplier to convert long to dbl */
-double mt_64_to_double;
+NVTYPE mt_64_to_double;
/* Mult'r to cvt long long to dbl */
+NVTYPE mt_96_to_double;
+NVTYPE mt_128_to_double;
/*
* In the recurrence relation, the new value is XORed with MATRIX_A only if
@@ -341,12 +345,16 @@
* don't worry too much about efficiency, since the assumption is that
* initialization is vastly rarer than generation of random numbers.
*/
- mt_32_to_double = 1.0;
- for (i = 0; i < BIT_WIDTH; i++)
- mt_32_to_double /= 2.0;
- mt_64_to_double = mt_32_to_double;
- for (i = 0; i < BIT_WIDTH; i++)
- mt_64_to_double /= 2.0;
+ mt_32_to_double = 1.0;
+ mt_64_to_double = 1.0;
+ mt_96_to_double = 1.0;
+ mt_128_to_double = 1.0;
+ for (i = 0; i < BIT_WIDTH; i++) {
+ mt_32_to_double /= 2.0;
+ mt_64_to_double /= 4.0;
+ mt_96_to_double /= 8.0;
+ mt_128_to_double /= 16.0;
+ }
state->initialized = 1;
}
@@ -460,6 +468,11 @@
uint32_t seeds[MT_STATE_SIZE])
/* Seed array to start from */
{
+
+#ifdef WIN32
+ dTHX;
+#endif
+
int had_nz = 0; /* NZ if at least one NZ seen */
int i; /* Loop index */
@@ -520,6 +533,11 @@
mt_state* state, /* State vector to seed */
char* seed_dev) /* Device to seed from */
{
+
+#ifdef WIN32
+ dTHX;
+#endif
+
int bytesread; /* Byte count read from device */
int nextbyte; /* Index of next byte to read */
FILE* ranfile; /* Access to device */
@@ -599,6 +617,11 @@
void mts_bestseed(
mt_state* state) /* State vector to seed */
{
+
+#ifdef WIN32
+ dTHX;
+#endif
+
int bytesread; /* Byte count read from device */
int nextbyte; /* Index of next byte to read */
FILE* ranfile; /* Access to device */
@@ -804,6 +827,11 @@
FILE* statefile, /* File to save to */
mt_state* state) /* State to be saved */
{
+
+#ifdef WIN32
+ dTHX;
+#endif
+
int i; /* Next word to save */
if (!state->initialized)