@Bers
Заблокирован
|
13.12.2011, 23:58
|
|
C++ | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
| #ifndef CKDice_H
#define CKDice_H
//Автор: Bers.
//Легковесный, простенький рандом.
//С хорошим покрытие случайности по всему диапазону.
//Не требует подключения стандартных библиотечных файлов
//Служит для генерации сл. чисел для простеньких задач.
//ПРИМЕР: CKDice Cubik; int Value = Cubik.GetRandom(0,6);
//вернёт случайное число от 0 до 6
class CKDice
{
public:
CKDice(){SeedValue=GetTick(); }
~CKDice(){}
//вернёт случайное число из заданного диапазона
//если мин окажется больше макс - сама переставит аргументы местами
int GetRandom( int MinValue, int MaxValue)
{
int Temp;
if(MinValue>MaxValue)
{
Temp =MaxValue; MaxValue=MinValue; MinValue=Temp;
}
Temp = RND(); return (Temp % (MaxValue-MinValue+1)+MinValue);
}
protected:
int SeedValue;
//сгенерирует очередное псевдослучайное число
int RND()
{ return ( ((SeedValue = SeedValue * 214013L + 2531011L ) >> 16)& 0x7fff);}
//вернёт кол-во тактов процессора
int GetTick()
{
//получим кол-во тактов процессора, прошедших с момента включения компа
//это очень мега большое число. целиком оно не влезет в инт, по этому
//можно считать что при каждой инициализации дайса в инт запишится
//некоторое псевдослучайное число
int timeNOW;
_asm
{
rdtsc;
mov [timeNOW],eax;
}
return timeNOW;
}
}; |
|
1
|