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

📄 diehard.c

📁 diehard随机数测试套件的C程序代码
💻 C
字号:

#include "header.h"#include "macro.h"void do_test(char *fn){  int i, status[16], tmp, id, flag=0, order=0;  char c;  for(i=0; i<16; ++i){    status[i]=0;  }  while( (c=getchar())!='\n' ){    if( c==' ' ) continue;    ungetc( c, stdin );    scanf("%d", &tmp);    ++order;    if(tmp>0){      id=tmp-1;
      flag=status[id]=order;    }    else{      id=-tmp-1;      status[id]=-order;    }  }  if(order==0) return;  if(flag<order && status[15]!=-order){    status[15]=flag+1;  }           if(status[15]>0){    for(i=0; i<15; ++i){      if( ABS(status[i])<status[15] && status[i]<=0){        ++order;        status[i]=order;      }    }
  }  status[15]=1000;  do{    tmp=15;    for(id=0; id<15; ++id){      if(status[id]<=0){        continue;      }         if(status[tmp]>status[id]){        tmp=id;        continue;      }    }        switch(tmp+1){      case 1: bday(fn); break;      case 2: operm5(fn); break;        case 3: binrnk(fn,"31x31"); binrnk(fn,"32x32"); break;
      case 4: binrnk(fn,"6x8"); break;         case 5: bitst(fn); break;      case 6: monky(fn, "OPSO"); monky(fn, "OQSO"); monky(fn, "DNA"); break;      case 7: cnt1s(fn, "stream"); break;      case 8: cnt1s(fn, "specific"); break;         case 9: park(fn); break;      case 10: mindist(fn); break;       case 11: sphere(fn); break;      case 12: squeez(fn); break;      case 13: osum(fn); break;      case 14: runtest(fn); break;      case 15: craptest(fn); break;      default: break;    }       status[tmp]=0;  }while(tmp!=15);  return;}
void diehard()
{

  char c, fn[100];


  puts("\n\t\t\t\tNOTE\n");

  puts("\tMost of the tests in DIEHARD return a p-value, which");
  puts("\tshould be uniform on [0,1) if the input file contains truly");
  puts("\tindependent random bits.   Those p-values are obtained by");
  puts("\tp=1-F(X), where F is the assumed distribution of the sample");
  puts("\trandom variable X---often normal. But that assumed F is often just");
  puts("\tan asymptotic approximation, for which the fit will be worst");
  puts("\tin the tails. Thus you should not be surprised with  occasion-");
  puts("\tal p-values near 0 or 1, such as .0012 or .9983. When a bit");
  puts("\tstream really FAILS BIG, you will get p`s of 0 or 1 to six ");
  puts("\tor more places.  By all means, do not, as a Statistician ");
  puts("\tmight, think that a p < .025 or p> .975 means that the RNG");
  puts("\thas \"failed the test at the .05 level\".  Such p`s happen");
  puts("\tamong the hundreds that DIEHARD produces, even with good RNGs.");
  puts("\t So keep in mind that \"p happens\"\n");
  puts("\tEnter the name of the file to be tested.");
  puts("\tThis must be a form=\"unformatted\",access=\"direct\" binary");
  puts("\tfile of about 10-12 million bytes. Enter file name: \n");

  while((c=getchar())==' ') ;

  if(c=='\n'){
    return;
  }

  ungetc(c, stdin);

  gets(fn);

  puts("\n\t\tHERE ARE YOUR CHOICES:\n");
  puts("\t\t1   Birthday Spacings");
  puts("\t\t2   Overlapping Permutations");
  puts("\t\t3   Ranks of 31x31 and 32x32 matrices");
  puts("\t\t4   Ranks of 6x8 Matrices");
  puts("\t\t5   Monkey Tests on 20-bit Words");
  puts("\t\t6   Monkey Tests OPSO,OQSO,DNA");
  puts("\t\t7   Count the 1`s in a Stream of Bytes");
  puts("\t\t8   Count the 1`s in Specific Bytes");
  puts("\t\t9   Parking Lot Test");
  puts("\t\t10  Minimum Distance Test");
  puts("\t\t11  Random Spheres Test");
  puts("\t\t12  The Sqeeze Test");
  puts("\t\t13  Overlapping Sums Test");
  puts("\t\t14  Runs Test");
  puts("\t\t15  The Craps Test");
  puts("\t\t16  All of the above\n");

  puts("\tTo choose any particular tests, enter corresponding numbers.");
  puts("\tEnter 16 for all tests. If you want to perform all but a few");
  puts("\ttests, enter corresponding numbers preceded by \"-\" sign.");
  puts("\tTests are executed in the order they are entered.\n");
  puts("\tEnter your choices.");

  do_test(fn);   return;}main(){  diehard();   return;}

⌨️ 快捷键说明

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