From 63783690d631efbed7f5fa4067cf315a9d58ec89 Mon Sep 17 00:00:00 2001 From: Daniel Borkmann Date: Sat, 24 Mar 2012 23:22:10 +0100 Subject: [PATCH] mtrand: minor: changed some comments Changed some comments in mtrand. Signed-off-by: Daniel Borkmann --- src/mtrand.c | 111 +++++------------------------------------------------------ src/mtrand.h | 6 ++-- 2 files changed, 11 insertions(+), 106 deletions(-) diff --git a/src/mtrand.c b/src/mtrand.c index 67b4e337..8cddf82c 100644 --- a/src/mtrand.c +++ b/src/mtrand.c @@ -2,46 +2,10 @@ * netsniff-ng - the packet sniffing beast * By Daniel Borkmann * Copyright 2009, 2010 Daniel Borkmann. - * Subject to the GPL, version 2. - */ - -/* * Copyright (C) 1997-2004, Makoto Matsumoto, Takuji Nishimura, and - * Eric Landry; All rights reserved. + * Eric Landry; All rights reserved. (3-clause BSD license) * Daniel Borkmann: Refactored, added initialization functions. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * - * 3. The names of its contributors may not be used to endorse or - * promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Any feedback is very welcome. - * http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html - * email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space) - * + * Subject to the GPL, version 2. * Reference: M. Matsumoto and T. Nishimura, "Mersenne Twister: * A 623-Dimensionally Equidistributed Uniform Pseudo-Random Number * Generator", ACM Transactions on Modeling and Computer Simulation, @@ -68,190 +32,131 @@ static unsigned long x[N]; static unsigned long *p0, *p1, *pm; -/* - * Initialize with a seed. - * - * See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. - * In the previous versions, MSBs of the seed affect only MSBs of - * the state. - * 2002-01-09 modified by Makoto Matsumoto - */ void mt_init_by_seed_rand(unsigned long s) { int i; - x[0] = s & 0xffffffffUL; - for (i = 1; i < N; ++i) { x[i] = (1812433253UL * (x[i - 1] ^ (x[i - 1] >> 30)) + i) & 0xffffffffUL; } - p0 = x; p1 = x + 1; pm = x + M; } -/* - * Initialize with time as seed. - */ void mt_init_by_seed_time(void) { int i; - x[0] = ((unsigned long) time(NULL)) & 0xffffffffUL; - for (i = 1; i < N; ++i) { x[i] = (1812433253UL * (x[i - 1] ^ (x[i - 1] >> 30)) + i) & 0xffffffffUL; } - p0 = x; p1 = x + 1; pm = x + M; } -/* - * Initialize by an array with array-length. - */ void mt_init_by_seed_array(unsigned long key[], int len) { int i, j, k; - mt_init_by_seed_rand(19650218UL); - i = 1; j = 0; - for (k = (N > len ? N : len); k; --k) { /* Non linear */ x[i] = ((x[i] ^ ((x[i - 1] ^ (x[i - 1] >> 30)) * 1664525UL)) + key[j] + j) & 0xffffffffUL; - if (++i >= N) { x[0] = x[N - 1]; i = 1; } - if (++j >= len) j = 0; } - for (k = N - 1; k; --k) { /* Non linear */ x[i] = ((x[i] ^ ((x[i - 1] ^ (x[i - 1] >> 30)) * 1566083941UL)) - i) & 0xffffffffUL; - if (++i >= N) { x[0] = x[N - 1]; i = 1; } } - x[0] = 0x80000000UL; } -/* - * Initialize by an random array. - */ void mt_init_by_seed_rand_array(void) { int i; unsigned long k[LEN_INIT]; - srand((unsigned int) time(NULL)); for (i = 0; i < LEN_INIT; i++) k[i] = rand(); - mt_init_by_seed_array(k, LEN_INIT); } -/* - * Initialize by an random array read from /dev/random - */ void mt_init_by_random_device(void) { int fd; unsigned long k[LEN_INIT]; - fd = open_or_die("/dev/random", O_RDONLY); read_or_die(fd, k, sizeof(unsigned long) * LEN_INIT); close(fd); - mt_init_by_seed_array(k, LEN_INIT); } -/* - * Generates a random number on the interval [0,0xffffffff] - */ unsigned long mt_rand_int32(void) { + /* Interval [0,0xffffffff] */ unsigned long y; - /* Default seed */ if (p0 == NULL) mt_init_by_seed_rand(5489UL); - /* Twisted feedback */ y = *p0 = *pm++ ^ (((*p0 & UPPER_MASK) | (*p1 & LOWER_MASK)) >> 1) ^ (-(*p1 & 1) & MATRIX_A); - p0 = p1++; - if (pm == x + N) pm = x; if (p1 == x + N) p1 = x; - /* Temper */ y ^= y >> 11; y ^= y << 7 & 0x9d2c5680UL; y ^= y << 15 & 0xefc60000UL; y ^= y >> 18; - return y; } -/* - * Generates a random number on the interval [0,0x7fffffff] - */ long mt_rand_int31(void) { + /* Interval [0,0x7fffffff] */ return (long) mt_rand_int32() >> 1; } -/* - * Generates a random number on the real interval [0,1] - */ double mt_rand_real1(void) { + /* Interval [0,1]; Divided by 2^32-1 */ return mt_rand_int32() * (1.0 / 4294967295.0); - /* Divided by 2^32-1 */ } -/* - * Generates a random number on the real interval [0,1) - */ double mt_rand_real2(void) { + /* Interval [0,1); Divided by 2^32 */ return mt_rand_int32() * (1.0 / 4294967296.0); - /* Divided by 2^32 */ } -/* - * Generates a random number on the real interval (0,1) - */ double mt_rand_real3(void) { + /* Interval (0,1); Divided by 2^32 */ return (((double) mt_rand_int32()) + 0.5) * (1.0 / 4294967296.0); - /* Divided by 2^32 */ } -/* - * Generates a 53-bit random number on the real interval [0,1) - */ double mt_rand_res53(void) { + /* 53-bit random number on the real interval [0,1) */ unsigned long a = mt_rand_int32() >> 5, b = mt_rand_int32() >> 6; return (a * 67108864.0 + b) * (1.0 / 9007199254740992.0); } diff --git a/src/mtrand.h b/src/mtrand.h index 1e5a8a4d..7b34c1e8 100644 --- a/src/mtrand.h +++ b/src/mtrand.h @@ -5,8 +5,8 @@ * Subject to the GPL, version 2. */ -#ifndef MERSENNE_TWISTER_H -#define MERSENNE_TWISTER_H +#ifndef MTRAND_H +#define MTRAND_H extern void mt_init_by_seed_rand(unsigned long s); extern void mt_init_by_seed_time(void); @@ -20,4 +20,4 @@ extern double mt_rand_real2(void); extern double mt_rand_real3(void); extern double mt_rand_res53(void); -#endif /* MERSENNE_TWISTER_H */ +#endif /* MTRAND_H */ -- 2.11.4.GIT