]> www.ginac.de Git - cln.git/blob - src/base/digitseq/cl_DS_random.cc
Initial revision
[cln.git] / src / base / digitseq / cl_DS_random.cc
1 // Digit sequence level random number generator.
2
3 // General includes.
4 #include "cl_sysdep.h"
5
6 // Specification.
7 #include "cl_random_impl.h"
8
9
10 // Implementation.
11
12 #include "cl_random.h"
13 #include "cl_DS.h"
14 #include "cl_low.h"
15
16 void random_UDS (cl_random_state& randomstate, uintD* ptr, uintC len)
17 {
18         var uintC count;
19         #if (intDsize==64)
20         dotimesC(count,len,
21           { mspref(ptr,0) = random64(randomstate); ptr = ptr mspop 1; });
22         #else // (intDsize<=32)
23         dotimesC(count,floor(len,32/intDsize),
24           { var uint32 next = random32(randomstate); // weitere 32/intDsize Digits besorgen
25             set_32_Dptr(ptr,next); ptr = ptr mspop 32/intDsize;
26           });
27         len = len % (32/intDsize); // Anzahl noch fehlender Digits
28         if (len>0)
29           { var uint32 next = random32(randomstate); // weitere 32/intDsize Digits besorgen
30             set_max32_Dptr(intDsize*len,ptr,next);
31           }
32         #endif
33 }