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

📄 prim.cpp

📁 Testprogram for the quality of PseudoRandomNumber Generators
💻 CPP
📖 第 1 页 / 共 2 页
字号:

	val = (double) longcnt;
	printf("\n RandomNumber %08lx Cycle %12lu %12lu",PrimeNumber,cnt,PrimeOffset);
	printf("\n DoubleSerialYourVar %08lx DoubleSerialYourVar %08lx",
		DoubleSerialYourVar[0],
		DoubleSerialYourVar[1]);

	printf("\n longcnt %I64u %6.2g",
		longcnt,
		val);

	fprintf(wwp,"\n DoubleSerialYourVar %08lx DoubleSerialYourVar %08lx longcnt %I64u",
		DoubleSerialYourVar[0],
		DoubleSerialYourVar[1],
		longcnt);
	
	fprintf(wwp," %08lx Cycle %12lu %12lu",PrimeNumber,cnt,PrimeOffset);

	for (testcount=0;testcount<MAX_TEST;testcount++) {
		fprintf(pp,"\n%04d %09u",testcount,TestArray[testcount]);
	}
	fclose(pp);
	Ende=1;
}

PXXGLOBAL void SerialRandomOne(void)
{
   /*
    * Diese Funktion berechnet in Anlehnung an den Original-Source f黵 alle Compiler die gleiche Pseudo-Random Funktion.
    */
//	SerialYourVar = SerialYourVar * PrimeNumber + PrimeOffset;	
/*	return (unsigned int) ((SerialYourVar / 65536L) % 32768L); */

	DoubleSerialYourVar[0] *= PrimeNumber;
	DoubleSerialYourVar[0] += DOUBLE_FAST_OFFSET1;


#define	FAST_OFFSET				0x4a71
#define	FAST_PRIME				0x7FFF00AB
#define	FAST_MASK				0x7a84ced0

#define	SECOND_PRIME			0x7FFF08D3
#define	SECOND_OFFSET			0xa1e1

/*
	DoubleSerialYourVar[0] *= FAST_PRIME;
	DoubleSerialYourVar[0] += FAST_OFFSET;

	DoubleSerialYourVar[1] *= SECOND_PRIME;
	DoubleSerialYourVar[1] += SECOND_OFFSET;

	SerialYourVar = DoubleSerialYourVar[0] ^ DoubleSerialYourVar[1];
*/
}


PXXGLOBAL void SerialRandomTwo(void)
{
   /*
    * Diese Funktion berechnet in Anlehnung an den Original-Source f黵 alle Compiler die gleiche Pseudo-Random Funktion.
    */
//	SerialYourVar = SerialYourVar * PrimeNumber + PrimeOffset;	
/*	return (unsigned int) ((SerialYourVar / 65536L) % 32768L); */

	DoubleSerialYourVar[1] *= FAST_PRIME;		// PrimeNumber;
	DoubleSerialYourVar[1] += DOUBLE_FAST_OFFSET2;

	SerialYourVar = DoubleSerialYourVar[0] ^ DoubleSerialYourVar[1];

}
#define	FirstFastSerialYourVar	Fast.WordFastSerialYourVar[0]
#define	SecondFastSerialYourVar	Fast.WordFastSerialYourVar[1]
#define	ScrambleByte(pp)	Fast.CharFastSerialYourVar[pp]


PXXGLOBAL void FastRandomTest(FILE *wwp,unsigned long number)
{
	long cnt=0;
	unsigned First;
	unsigned Second;

	FirstFastPrimeNumber= (unsigned)number;					/*	2147418487UL */
	SecondFastPrimeNumber= (unsigned)number+2;					/*	2147418487UL */

	FirstFastSerialYourVar = 1234;
	SecondFastSerialYourVar = 2134;

	FirstFastSerialRandom();
	SecondFastSerialRandom();
	FirstFastSerialRandom();
	First = FirstFastSerialYourVar;
	SecondFastSerialRandom();
	Second=SecondFastSerialYourVar;

	printf(" First %5u Second %5u",First,Second);

	do {
		FirstFastSerialRandom();
		SecondFastSerialRandom();
//		FirstFastSerialYourVar +=SecondFastSerialYourVar;
		cnt++;
	} while (!(FirstFastSerialYourVar==First && SecondFastSerialYourVar==Second));

	printf("\n FirstFastSerialYourVar 0x%04x Prim 0x%04x Cycle %12lu",FirstFastSerialYourVar,FirstFastPrimeNumber,cnt);
	fprintf(wwp," 0x%04x 0x%04x Cycle %12lu",FirstFastPrimeNumber,SecondFastPrimeNumber,cnt);


}

/****************************************************************************
union {
	unsigned short WordFastSerialYourVar[2];
	unsigned char CharFastSerialYourVar[4];
} Fast;
short unsigned FirstFastPrimeNumber;
short unsigned SecondFastPrimeNumber;

*****************************************************************************/

PXXGLOBAL void FirstFastSerialRandom(void)
{
   /*
    * Diese Funktion berechnet in Anlehnung an den Original-Source f黵 alle Compiler die gleiche Pseudo-Random Funktion.
    */
#ifdef	ALT	
	FirstFastSerialYourVar = FirstFastSerialYourVar * FastPrimeNumber + 0x4a71;
#else
	FirstFastSerialYourVar *= FirstFastPrimeNumber;
	FirstFastSerialYourVar +=  5494u;

//	ScrambleByte(3) ^= ScrambleByte(0);


#ifdef	ALT	
	ScrambleByte(1) ^= ScrambleByte(0);

	if (ScrambleByte(1)!=0x23) {
		FirstFastSerialYourVar *= SecondFastPrimeNumber;
	}
	FirstFastSerialYourVar += 14442u;
#endif
#endif
}

PXXGLOBAL void SecondFastSerialRandom(void)
{
	SecondFastSerialYourVar *= SecondFastPrimeNumber;
	SecondFastSerialYourVar += 1494u;
}


/************************************************************

 2147418127 7FFF000F Max 0000c71e      50974 4.63402e+04  7fff000f Cycle    536870912
 2147418131 7FFF0013 Max 0000c71e      50974 4.63402e+04  7fff0013 Cycle   2147483648
 2147418137 7FFF0019 Max 0000c71e      50974 4.63402e+04  7fff0019 Cycle            0
 2147418179 7FFF0043 Max 0000c71e      50974 4.63402e+04  7fff0043 Cycle   2147483648
 2147418191 7FFF004F Max 0000c71e      50974 4.63402e+04  7fff004f Cycle    536870912
 2147418199 7FFF0057 Max 0000c71e      50974 4.63402e+04  7fff0057 Cycle   1073741824
 2147418227 7FFF0073 Max 0000c71e      50974 4.63402e+04  7fff0073 Cycle   2147483648
 2147418277 7FFF00A5 Max 0000c71e      50974 4.63402e+04  7fff00a5 Cycle            0
 2147418283 7FFF00AB Max 0000c71e      50974 4.63402e+04  7fff00ab Cycle   2147483648
 2147418307 7FFF00C3 Max 0000c71e      50974 4.63402e+04  7fff00c3 Cycle   2147483648
 2147418313 7FFF00C9 Max 0000c71e      50974 4.63402e+04  7fff00c9 Cycle            0
 2147418341 7FFF00E5 Max 0000c71e      50974 4.63402e+04  7fff00e5 Cycle            0
 2147418347 7FFF00EB Max 0000c71e      50974 4.63402e+04  7fff00eb Cycle   2147483648


 2147418127 7FFF000F Max 0000c71e      50974 4.634024e+004  7fff000f Cycle    536870912
 2147418131 7FFF0013 Max 0000c71e      50974 4.634024e+004  7fff0013 Cycle   2147483648
 2147418137 7FFF0019 Max 0000c71e      50974 4.634024e+004  7fff0019 Cycle            0
 2147418179 7FFF0043 Max 0000c71e      50974 4.634024e+004  7fff0043 Cycle   2147483648
 2147418191 7FFF004F Max 0000c71e      50974 4.634024e+004  7fff004f Cycle    536870912
 2147418199 7FFF0057 Max 0000c71e      50974 4.634024e+004  7fff0057 Cycle   1073741824
 2147418227 7FFF0073 Max 0000c71e      50974 4.634024e+004  7fff0073 Cycle   2147483648
 2147418277 7FFF00A5 Max 0000c71e      50974 4.634024e+004  7fff00a5 Cycle            0
 2147418283 7FFF00AB Max 0000c71e      50974 4.634024e+004  7fff00ab Cycle   2147483648

      64849 0000FD51 Max 000000fe sqrt==       254 2.546547e+002  fd51 Cycle        65536
      64853 0000FD55 Max 000000fe sqrt==       254 2.546625e+002  fd55 Cycle        65536
      64871 0000FD67 Max 000000fe sqrt==       254 2.546979e+002  fd67 Cycle        16384
      64877 0000FD6D Max 000000fe sqrt==       254 2.547096e+002  fd6d Cycle        65536
      64879 0000FD6F Max 000000fe sqrt==       254 2.547136e+002  fd6f Cycle         8192
      64891 0000FD7B Max 000000fe sqrt==       254 2.547371e+002  fd7b Cycle        32768
      64901 0000FD85 Max 000000ff sqrt==       255 2.547567e+002  fd85 Cycle        65536
      64919 0000FD97 Max 000000ff sqrt==       255 2.547921e+002  fd97 Cycle        16384
      64921 0000FD99 Max 000000ff sqrt==       255 2.547960e+002  fd99 Cycle        65536
      64927 0000FD9F Max 000000ff sqrt==       255 2.548078e+002  fd9f Cycle         4096
      64937 0000FDA9 Max 000000ff sqrt==       255 2.548274e+002  fda9 Cycle        65536
      64951 0000FDB7 Max 000000ff sqrt==       255 2.548549e+002  fdb7 Cycle        16384
      64969 0000FDC9 Max 000000ff sqrt==       255 2.548902e+002  fdc9 Cycle        65536
      64997 0000FDE5 Max 000000ff sqrt==       255 2.549451e+002  fde5 Cycle        65536
      65003 0000FDEB Max 000000ff sqrt==       255 2.549569e+002  fdeb Cycle        32768
      65011 0000FDF3 Max 000000ff sqrt==       255 2.549725e+002  fdf3 Cycle        32768
      65027 0000FE03 Max 000000ff sqrt==       255 2.550039e+002  fe03 Cycle        32768
      65029 0000FE05 Max 000000ff sqrt==       255 2.550078e+002  fe05 Cycle        65536
      65033 0000FE09 Max 000000ff sqrt==       255 2.550157e+002  fe09 Cycle        65536
      65053 0000FE1D Max 000000ff sqrt==       255 2.550549e+002  fe1d Cycle        65536
      65063 0000FE27 Max 000000ff sqrt==       255 2.550745e+002  fe27 Cycle        16384
      65071 0000FE2F Max 000000ff sqrt==       255 2.550902e+002  fe2f Cycle         8192
      65089 0000FE41 Max 000000ff sqrt==       255 2.551255e+002  fe41 Cycle        65536
      65099 0000FE4B Max 000000ff sqrt==       255 2.551451e+002  fe4b Cycle        32768
      65101 0000FE4D Max 000000ff sqrt==       255 2.551490e+002  fe4d Cycle        65536
      65111 0000FE57 Max 000000ff sqrt==       255 2.551686e+002  fe57 Cycle        16384
      65119 0000FE5F Max 000000ff sqrt==       255 2.551842e+002  fe5f Cycle         4096
      65123 0000FE63 Max 000000ff sqrt==       255 2.551921e+002  fe63 Cycle        32768
      65129 0000FE69 Max 000000ff sqrt==       255 2.552038e+002  fe69 Cycle        65536
      65141 0000FE75 Max 000000ff sqrt==       255 2.552273e+002  fe75 Cycle        65536
      65147 0000FE7B Max 000000ff sqrt==       255 2.552391e+002  fe7b Cycle        32768
      65167 0000FE8F Max 000000ff sqrt==       255 2.552783e+002  fe8f Cycle         8192
      65171 0000FE93 Max 000000ff sqrt==       255 2.552861e+002  fe93 Cycle        32768
      65173 0000FE95 Max 000000ff sqrt==       255 2.552900e+002  fe95 Cycle        65536
      65179 0000FE9B Max 000000ff sqrt==       255 2.553018e+002  fe9b Cycle        32768
      65183 0000FE9F Max 000000ff sqrt==       255 2.553096e+002  fe9f Cycle         4096
      65203 0000FEB3 Max 000000ff sqrt==       255 2.553488e+002  feb3 Cycle        32768
      65213 0000FEBD Max 000000ff sqrt==       255 2.553684e+002  febd Cycle        65536
      65239 0000FED7 Max 000000ff sqrt==       255 2.554193e+002  fed7 Cycle        16384
      65257 0000FEE9 Max 000000ff sqrt==       255 2.554545e+002  fee9 Cycle        65536
      65267 0000FEF3 Max 000000ff sqrt==       255 2.554741e+002  fef3 Cycle        32768
      65269 0000FEF5 Max 000000ff sqrt==       255 2.554780e+002  fef5 Cycle        65536
      65287 0000FF07 Max 000000ff sqrt==       255 2.555132e+002  ff07 Cycle        16384
      65293 0000FF0D Max 000000ff sqrt==       255 2.555249e+002  ff0d Cycle        65536
      65309 0000FF1D Max 000000ff sqrt==       255 2.555563e+002  ff1d Cycle        65536
      65323 0000FF2B Max 000000ff sqrt==       255 2.555836e+002  ff2b Cycle        32768
      65327 0000FF2F Max 000000ff sqrt==       255 2.555915e+002  ff2f Cycle         8192
      65353 0000FF49 Max 000000ff sqrt==       255 2.556423e+002  ff49 Cycle        65536
      65357 0000FF4D Max 000000ff sqrt==       255 2.556502e+002  ff4d Cycle        65536
      65371 0000FF5B Max 000000ff sqrt==       255 2.556775e+002  ff5b Cycle        32768
      65381 0000FF65 Max 000000ff sqrt==       255 2.556971e+002  ff65 Cycle        65536
      65393 0000FF71 Max 000000ff sqrt==       255 2.557206e+002  ff71 Cycle        65536
      65407 0000FF7F Max 00000100 sqrt==       256 2.557479e+002  ff7f Cycle         1024
      65413 0000FF85 Max 00000100 sqrt==       256 2.557597e+002  ff85 Cycle        65536
      65419 0000FF8B Max 00000100 sqrt==       256 2.557714e+002  ff8b Cycle        32768
      65423 0000FF8F Max 00000100 sqrt==       256 2.557792e+002  ff8f Cycle         8192
      65437 0000FF9D Max 00000100 sqrt==       256 2.558066e+002  ff9d Cycle        65536
      65447 0000FFA7 Max 00000100 sqrt==       256 2.558261e+002  ffa7 Cycle        16384
      65449 0000FFA9 Max 00000100 sqrt==       256 2.558300e+002  ffa9 Cycle        65536
      65479 0000FFC7 Max 00000100 sqrt==       256 2.558886e+002  ffc7 Cycle        16384
      65497 0000FFD9 Max 00000100 sqrt==       256 2.559238e+002  ffd9 Cycle        65536
      65519 0000FFEF Max 00000100 sqrt==       256 2.559668e+002  ffef Cycle         8192
      65521 0000FFF1 Max 00000100 sqrt==       256 2.559707e+002  fff1 Cycle        65536 
***************************************************************/

⌨️ 快捷键说明

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