gk_mkrandom.h
Go to the documentation of this file.
1 
11 #ifndef _GK_MKRANDOM_H
12 #define _GK_MKRANDOM_H
13 
14 /*************************************************************************/\\
22 /**************************************************************************/\
23 #define GK_MKRANDOM(FPRFX, RNGT, VALT)\
24 /*************************************************************************/\
25  \
26 /**************************************************************************/\
27 void FPRFX ## srand(RNGT seed) \
28 {\
29  gk_randinit((uint64_t) seed);\
30 }\
31 \
32 \
33 /*************************************************************************/\
34  \
35 /**************************************************************************/\
36 RNGT FPRFX ## rand() \
37 {\
38  if (sizeof(RNGT) <= sizeof(int32_t)) \
39  return (RNGT)gk_randint32(); \
40  else \
41  return (RNGT)gk_randint64(); \
42 }\
43 \
44 \
45 /*************************************************************************/\
46  \
47 /**************************************************************************/\
48 RNGT FPRFX ## randInRange(RNGT max) \
49 {\
50  return (RNGT)((FPRFX ## rand())%max); \
51 }\
52 \
53 \
54 /*************************************************************************/\
55 \
58 /**************************************************************************/\
59 void FPRFX ## randArrayPermute(RNGT n, VALT *p, RNGT nshuffles, int flag)\
60 {\
61  RNGT i, u, v;\
62  VALT tmp;\
63 \
64  if (flag == 1) {\
65  for (i=0; i<n; i++)\
66  p[i] = (VALT)i;\
67  }\
68 \
69  if (n < 10) {\
70  for (i=0; i<n; i++) {\
71  v = FPRFX ## randInRange(n);\
72  u = FPRFX ## randInRange(n);\
73  gk_SWAP(p[v], p[u], tmp);\
74  }\
75  }\
76  else {\
77  for (i=0; i<nshuffles; i++) {\
78  v = FPRFX ## randInRange(n-3);\
79  u = FPRFX ## randInRange(n-3);\
80  /*gk_SWAP(p[v+0], p[u+0], tmp);*/\
81  /*gk_SWAP(p[v+1], p[u+1], tmp);*/\
82  /*gk_SWAP(p[v+2], p[u+2], tmp);*/\
83  /*gk_SWAP(p[v+3], p[u+3], tmp);*/\
84  gk_SWAP(p[v+0], p[u+2], tmp);\
85  gk_SWAP(p[v+1], p[u+3], tmp);\
86  gk_SWAP(p[v+2], p[u+0], tmp);\
87  gk_SWAP(p[v+3], p[u+1], tmp);\
88  }\
89  }\
90 }\
91 \
92 \
93 /*************************************************************************/\
94 \
97 /**************************************************************************/\
98 void FPRFX ## randArrayPermuteFine(RNGT n, VALT *p, int flag)\
99 {\
100  RNGT i, v;\
101  VALT tmp;\
102 \
103  if (flag == 1) {\
104  for (i=0; i<n; i++)\
105  p[i] = (VALT)i;\
106  }\
107 \
108  for (i=0; i<n; i++) {\
109  v = FPRFX ## randInRange(n);\
110  gk_SWAP(p[i], p[v], tmp);\
111  }\
112 }\
113 
114 
115 #define GK_MKRANDOM_PROTO(FPRFX, RNGT, VALT)\
116  void FPRFX ## srand(RNGT seed); \
117  RNGT FPRFX ## rand(); \
118  RNGT FPRFX ## randInRange(RNGT max); \
119  void FPRFX ## randArrayPermute(RNGT n, VALT *p, RNGT nshuffles, int flag);\
120  void FPRFX ## randArrayPermuteFine(RNGT n, VALT *p, int flag);\
121 
122 
123 #endif


gtsam
Author(s):
autogenerated on Tue Jul 4 2023 02:34:18