monobits.c

来自「随机数算法」· C语言 代码 · 共 42 行

C
42
字号
/*  monobits test.  The most basic test possible,    this counts the number of 1 bits in a block.    p-value -s erfc(abs(sum)/sqrt(2n)) as described    in NIST document.  Sum is incremented for set bit,    decremented for cleared bit.    Enter with pointer to start of bit block and     number of bits to process.  Returns p-value    and updated source pointer.*/#include "randtest.h"double monobits( SRCPTR *src, int numbits){  double sum, arg;  unsigned char mask;  arg = numbits;  sum = 0.0;  mask = 1 << src->bitpos;  while( numbits)  {    if( *(src->byteptr) & mask) sum += 1.0;    else sum -= 1.0;    mask <<= 1;    numbits--;    if ( !(mask & 0xff))    {      mask = 1;      src->byteptr++;    }    src->bitpos++;    src->bitpos &= 7;  }  arg = fabs(sum) / sqrt( 2.0*arg);  arg = erfc(arg);  return( arg);}

⌨️ 快捷键说明

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