Subversion Repositories Kolibri OS

Rev

Rev 5575 | Rev 5582 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5575 Rev 5576
Line 16... Line 16...
16
    You should have received a copy of the GNU General Public License
16
    You should have received a copy of the GNU General Public License
17
    along with this program; if not, write to the Free Software
17
    along with this program; if not, write to the Free Software
18
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
Line 19... Line 19...
19
 
19
 
-
 
20
*******************************************************************************/
-
 
21
#define MASK_RAND 123456789
-
 
22
#define IQ_RAND 12773
-
 
23
#define IA_RAND 16807
-
 
24
#define IR_RAND 2836
-
 
25
#define IM_RAND 2147483647
Line 20... Line 26...
20
*******************************************************************************/
26
#define AM_RAND (1./2147483647)
21
 
27
 
22
inline fastcall int random( ECX)
28
inline fastcall int random( ECX)
23
// get pseudo-random number - ïîëó÷èòü ïñåâäîñëó÷àéíîå ÷èñëî
29
// get pseudo-random number - ïîëó÷èòü ïñåâäîñëó÷àéíîå ÷èñëî
Line 38... Line 44...
38
  EAX = EAX % ECX;
44
  EAX = EAX % ECX;
Line 39... Line 45...
39
  
45
  
40
  $pop ebx  
46
  $pop ebx  
Line -... Line 47...
-
 
47
}
-
 
48
 
-
 
49
:inline long unirand0(void)
-
 
50
{
-
 
51
	 long k,ans,tmp,save;
-
 
52
	 save = __generator;
-
 
53
	 __generator^=MASK_RAND;   /* avoid __generator==0 */
-
 
54
	 k=__generator/IQ_RAND;
-
 
55
	 tmp=__generator-k*IQ_RAND;
-
 
56
	 __generator*=IA_RAND*tmp;
-
 
57
	 __generator-=IR_RAND*k;
-
 
58
	 if(__generator<0) __generator+=IM_RAND;
-
 
59
	 if(save == __generator) return unirand0();
-
 
60
	 ans=__generator;
-
 
61
	 __generator^=MASK_RAND;   /* restore unmasked dummy */
-
 
62
	 return ans;
-
 
63
}
-
 
64
 
-
 
65
:long RAND_A,RAND_C,RAND_TMP;
-
 
66
:inline long rand(signed long x1,x2)
-
 
67
{
-
 
68
	long tmp,xx;
-
 
69
	RAND_A = __generator;
-
 
70
	__generator = RAND_A*__generator+RAND_C;
-
 
71
	RAND_C = __generator^RAND_A;
-
 
72
	RAND_C>>=1;
-
 
73
	RAND_A<<=1;
-
 
74
	__generator^=RAND_A;
-
 
75
	xx=x2;
-
 
76
	if(x1<0)xx+=-x1;
-
 
77
	tmp = __generator%xx;
-
 
78
	if(tmp<0)tmp=-tmp;
-
 
79
	tmp+=x1;
-
 
80
	return tmp;
41
}
81
}
42
 
82
 
43
inline fastcall randomize()
83
inline fastcall randomize()
44
// initialize random number __generator - èíèöèàëèçèðîâàòü ãåíåðàòîð ñëó÷àéíûõ ÷èñåë
84
// initialize random number __generator - èíèöèàëèçèðîâàòü ãåíåðàòîð ñëó÷àéíûõ ÷èñåë
45
{
85
{
46
  asm
86
  asm
47
  {
87
  {
48
    mov eax,3
88
    mov eax,3
49
    int 0x40
89
    int 0x40
-
 
90
    ror eax,16
50
    ror eax,16
91
  }
51
  }
92
  //if(EAX == __generator)return randomize();