Toshihiro Shimizu 890ddd
#include <limits> /* std::numeric_limits */</limits>
Toshihiro Shimizu 890ddd
#include "igs_math_random.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//using igs::math::random;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
igs::math::random::random() : seed_(1) {}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/* 乱数種 seed(0〜std::numeric_limits<long>::max()) */</long>
Toshihiro Shimizu 890ddd
void igs::math::random::seed(unsigned long seed) { this->seed_ = seed; }
Toshihiro Shimizu 890ddd
unsigned long
Toshihiro Shimizu 890ddd
igs::math::random::seed(void) const { return this->seed_; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/* 乱数生成 0〜std::numeric_limits<long>::max() */</long>
Toshihiro Shimizu 890ddd
long igs::math::random::next(void)
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
	this->seed_ = this->seed_ * 1103515245UL + 12345UL;
Toshihiro Shimizu 890ddd
	/* 0x41C64E6D + 0x3039 */
Toshihiro Shimizu 890ddd
	return static_cast<long>((this->seed_) %</long>
Toshihiro Shimizu 890ddd
							 (static_cast<unsigned long="">(std::numeric_limits<long>::max()) + 1UL));</long></unsigned>
Toshihiro Shimizu 890ddd
	//	    /* (this->seed_/  65536)%32768 */
Toshihiro Shimizu 890ddd
	//	return (this->seed_/0x10000)%0x8000;
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
double
Toshihiro Shimizu 890ddd
igs::math::random::next_d(void)
Toshihiro Shimizu 890ddd
{ /* 0 ... 1 */
Toshihiro Shimizu 890ddd
	return static_cast<double>(this->next()) /</double>
Toshihiro Shimizu 890ddd
		   static_cast<double>(std::numeric_limits<long>::max());</long></double>
Toshihiro Shimizu 890ddd
}