⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 libdieharder.h

📁 Dieharder是一个是一个测试一序列伪随机数的随机性能的测试套件
💻 H
字号:
/* *======================================================================== * $Id: libdieharder.h 248 2006-10-09 17:59:54Z rgb $ * * See copyright in copyright.h and the accompanying file COPYING *======================================================================== */#include "copyright.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/time.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <math.h>#include <limits.h>#include <gsl/gsl_rng.h>#include <gsl/gsl_randist.h>#include <gsl/gsl_cdf.h>#include <gsl/gsl_sf.h>#include <gsl/gsl_sort.h>#include <gsl/gsl_vector.h>#include <gsl/gsl_matrix.h>#include <dieharder/Dtest.h>#include <dieharder/parse.h>#include <dieharder/verbose.h>#include <dieharder/Xtest.h>#include <dieharder/Vtest.h>#include <dieharder/std_test.h>#include <dieharder/tests.h>/* *======================================================================== * Useful defines *======================================================================== */#define STDIN	stdin#define STDOUT	stdout#define STDERR	stderr#define YES	1#define NO	0#define PI      3.141592653589793238462643#define K       1024#define PAGE    4096#define M       1048576#define M_2     2097152/* * For reasons unknown and unknowable, free() doesn't null the pointer * it frees (possibly because it is called by value!)  Nor does it return * a success value.  In fact, it is just a leak or memory corruption waiting * to happen.  Sigh. * * nullfree frees and sets the pointer it freed back to NULL.  This let's * one e.g. if(a) nullfree(a) to safely free a IFF it is actually a pointer, * and let's one test on a in other ways to avoid leaking memory. */#define nullfree(a) {free(a);a = 0;} /*  *========================================================================  * Subroutine Prototypes  *========================================================================  */ unsigned long int random_seed(); void start_timing(); void stop_timing(); double delta_timing(); void measure_rate(); void Usage(); void help(); double binomial(unsigned int n, unsigned int k, double p); double chisq_eval(double *x,double *y,double *sigma, unsigned int n); double chisq_poisson(uint *observed,double lambda,int kmax,uint nsamp); double chisq_binomial(double *observed,double prob,uint kmax,uint nsamp); double sample(void *testfunc()); double kstest(double *pvalue,int count); double kstest_kuiper(double *pvalue,int count); double q_ks(double x); double q_ks_kuiper(double x); uint get_bit_ntuple(uint *bitstring,uint bslen,uint blen,uint boffset); void dumpbits(unsigned int *data, unsigned int nbits); uint get_uint_rand(gsl_rng *gsl_rng); void cycle(unsigned int *data, unsigned int nbits); int get_bit(uint *rand_uint, unsigned int n); int get_int_bit(uint i, uint n); void fill_uint_buffer(uint *data,uint buflength); uint b_umask(uint bstart,uint bstop); uint b_window(uint input,uint bstart,uint bstop,uint boffset); uint b_rotate_left(uint input,uint shift); uint b_rotate_right(uint input, uint shift); void get_ntuple_cyclic(uint *input,uint ilen,    uint *output,uint jlen,uint ntuple,uint offset); uint get_uint_rand(gsl_rng *gsl_rng); void get_rand_bits(void *result,uint rsize,uint nbits,gsl_rng *gsl_rng);           /*  *========================================================================  *                           Global Variables  *  * The primary control variables, in alphabetical order, with comments.  *========================================================================  */ int all;               /* Flag to do all tests on selected generator */ int binary;            /* Flag to output rands in binary (with -o -f) */ int bits;              /* bitstring size (in bits) */ int diehard;           /* Diehard test number */ int generator;         /* GSL generator id number to be tested */ int help_flag;         /* Help flag */ int hist_flag;         /* Histogram display flag */ int iterations;	/* For timing loop, set iterations to be timed */ int list;              /* List all tests flag */ int List;              /* List all generators flag */ int ntuple;            /* n-tuple size for n-tuple tests */ int num_randoms;		/* the number of randoms stored into memory and usable */ int output;		/* equals 1 if you output to file, otherwise 0. */ int overlap;           /* equals 1 if you really want to use diehard overlap */ int psamples;          /* Number of test runs in final KS test */ int quiet;             /* quiet flag -- surpresses full output report */ int rgb;               /* rgb test number */ int sts;               /* sts test number */ uint Seed;             /* user selected seed.  Surpresses reseeding per sample.*/ uint tsamples;         /* Generally should be "a lot". */ int user;              /* user defined test number */ int verbose;           /* Default is not to be verbose. */ double x_user;         /* General purpose command line inputs for use */ double y_user;         /* in any test. */ double z_user;   /*  *========================================================================  *  * A few more needed variables.  *  *      ks_pvalue is a vector of p-values obtained by samples, kspi is  *      its index.  *  *      tv_start and tv_stop are used to record timings.  *  *      dummy and idiot are there to fool the compiler into not optimizing  *      empty loops out of existence so we can time one accurately.  *  *      fp is a file pointer for input or output purposes.  *  *========================================================================  */#define KS_SAMPLES_PER_TEST_MAX 256 /* We need two of these to do diehard_craps.  Sigh. */ double *ks_pvalue,*ks_pvalue2; unsigned int kspi; struct timeval tv_start,tv_stop; int dummy,idiot; FILE *fp;#define MAXFIELDNUMBER 8 char **fields; /*  * Global variables and prototypes associated with file_input and  * file_input_raw.  */ uint file_input_get_rewind_cnt(gsl_rng *rng); uint file_input_get_rtot(gsl_rng *rng); void file_input_set_rtot(gsl_rng *rng,uint value); char filename[K];      /* Input file name */ int fromfile;		/* set true if file is used for rands */ int filenumbits;	/* number of bits per integer */ uint filecount;	/* number of rands in file */ char filetype;         /* file type *//* * This struct contains the data maintained on the operation of * the file_input rng, and can be accessed via rng->state->whatever * *  fp is the file pointer *  flen is the number of rands in the file (filecount) *  rptr is a count of rands returned since last rewind *  rtot is a count of rands returned since the file was opened *  rewind_cnt is a count of how many times the file was rewound *     since its last open. */ typedef struct {    FILE *fp;    uint flen;    uint rptr;    uint rtot;    uint rewind_cnt;  } file_input_state_t; /*  * rng global vectors and variables for setup and tests.  */ const gsl_rng_type **types;    /* where all the rng types go */ gsl_rng *rng;               /* global gsl random number generator */ /* The following are cruft from pre-library days -- remove */ /* unsigned int *rand_int;        /* vector of "random" uints */ /* unsigned int **rand_mtx;       /* matrix of "random" uints */ /* double *rand_dbl;              /* vector of "random" uniform deviates */ /*  * All required for GSL Singular Value Decomposition (to obtain  * the rank of the random matrix for diehard rank tests).  */ gsl_matrix *A,*V; gsl_vector *S,*svdwork; unsigned int seed;             /* rng seed of run (?) */ unsigned int random_max;       /* maximum rng returned by generator */ unsigned int rmax;             /* scratch space for random_max manipulation */ unsigned int rmax_bits;        /* Number of valid bits in rng */ unsigned int rmax_mask;        /* Mask for valid section of uint */ int num_gsl_rngs,num_my_rngs,num_rngs;  /* number of rng's */ 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -