rndlcg.cxx

来自「模拟退火算法来源于固体退火原理」· CXX 代码 · 共 73 行

CXX
73
字号
// rndlcd.c++   Implementation of Linear Congruential Method////                      (c) Copyright 1994, Everett F. Carter Jr.//                      Permission is granted by the author to use//			this software for any application provided this//			copyright notice is preserved.static const char rcsid[] = "@(#)rndlcg.c++	1.2 14:38:46 7/25/94   EFC";#include <stdlib.h>#include <math.h>#include <limits.h>#include <rndlcg.hpp>#include <registrar.hpp>#define ALL_BITS     0xffffffffint RandLCG::instances = 0;const long int RandLCG::quotient  = LONG_MAX / 16807L;const long int RandLCG::remainder = LONG_MAX % 16807L;RandLCG::RandLCG(){        unsigned int ser_no = registrar.serial_number();        instances++;        seed(12331+ser_no);}long RandLCG::seed(const long sd){        if ( sd > 0 )                seed_val = sd;        return seed_val;}unsigned long int RandLCG::rani()       /* returns a random unsigned integer */{	if ( seed_val <= quotient )		seed_val = (seed_val * 16807L) % LONG_MAX;	else	{		long int high_part = seed_val / quotient;		long int low_part  = seed_val % quotient;		long int test = 16807L * low_part - remainder * high_part;		if ( test > 0 )			seed_val = test;		else			seed_val = test + LONG_MAX;	}	return seed_val; }Real RandLCG::ranf()               /* returns a random double in range 0..1 */{	unsigned long int new_rand = rani();	return new_rand / (Real)( (unsigned long int) ALL_BITS );}

⌨️ 快捷键说明

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