Logo ROOT  
Reference Guide
 
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Loading...
Searching...
No Matches
testrandom.C
Go to the documentation of this file.
1/// \file
2/// \ingroup tutorial_math
3/// \notebook -nodraw
4/// Performance test of all the ROOT random generator (TRandom, TRandom1, TRandom2 and TRandom3).
5///
6/// Tests the generator TRandom3 against some ref values
7/// and creates a timing table against TRandom, TRandom1 and TRandom2.
8///
9/// E.g. on an an Intel Xeon Quad-core Harpertown (E5410) 2.33 GHz running
10/// Linux SLC4 64 bit and compiled with gcc 3.4
11///
12/// ~~~
13/// Distribution nanoseconds/call
14/// TRandom TRandom1 TRandom2 TRandom3
15/// Rndm.............. 5.000 105.000 7.000 10.000
16/// RndmArray......... 4.000 104.000 6.000 9.000
17/// Gaus.............. 36.000 180.000 40.000 48.000
18/// Rannor............ 118.000 220.000 120.000 124.000
19/// Landau............ 22.000 123.000 26.000 31.000
20/// Exponential....... 93.000 198.000 98.000 104.000
21/// Binomial(5,0.5)... 30.000 548.000 46.000 65.000
22/// Binomial(15,0.5).. 75.000 1615.000 125.000 178.000
23/// Poisson(3)........ 96.000 494.000 109.000 125.000
24/// Poisson(10)....... 138.000 1236.000 165.000 203.000
25/// Poisson(70)....... 818.000 1195.000 835.000 844.000
26/// Poisson(100)...... 837.000 1218.000 849.000 864.000
27/// GausTF1........... 83.000 180.000 87.000 88.000
28/// LandauTF1......... 80.000 180.000 83.000 86.000
29/// GausUNURAN........ 40.000 139.000 41.000 44.000
30/// PoissonUNURAN(10). 85.000 271.000 92.000 102.000
31/// PoissonUNURAN(100) 62.000 256.000 69.000 78.000
32/// ~~~
33///
34/// Note that this tutorial can be executed in interpreted or compiled mode
35///
36/// ~~~{.cpp}
37/// Root > .x testrandom.C
38/// Root > .x testrandom.C++
39/// ~~~
40///
41/// \macro_output
42/// \macro_code
43///
44/// \authors Rene Brun, Lorenzo Moneta
45
46#include <TRandom1.h>
47#include <TRandom2.h>
48#include <TRandom3.h>
49#include <TRandomGen.h>
50#include <TStopwatch.h>
51#include <TF1.h>
52#if __has_include("TUnuran.h") // handy check
53#include <TUnuran.h>
54#include <TUnuranContDist.h>
55#endif
56#include <TFile.h>
57
58
59void testAll() {
60 int i, N = 2000000;
61 float cpn = 1000000000./N;
62 int N1 = N/10; float cpn1 = cpn*10; // for TRandom1
63 double x,y;
65 TRandom *r0 = new TRandom();
66 TRandom *r1 = new TRandom1();
67 TRandom *r2 = new TRandom2();
68 TRandom *r3 = new TRandom3();
69 TRandom *r4 = new TRandomMixMax();
70 TRandom *r5 = new TRandomMixMax17();
74 TRandom *r9 = new TRandomMT64();
76
77
79 printf("Distribution nanoseconds/call\n");
80 printf(" TRandom TRandom1 TRandom2 TRandom3 MixMax240 MixMax17 Mixmax256_0 MixMax256_2 MixMax256_4 MT_64 Ranlux48\n");
81
82 sw.Start();
83 for (i=0;i<N;i++) {
84 x = r0->Rndm(i);
85 }
86 printf("Rndm.............. %8.3f",sw.CpuTime()*cpn);
87 sw.Start();
88 for (i=0;i<N1;i++) {
89 x = r1->Rndm(i);
90 }
91 printf(" %8.3f",sw.CpuTime()*cpn1);
92 sw.Start();
93 for (i=0;i<N;i++) {
94 x = r2->Rndm(i);
95 }
96 printf(" %8.3f",sw.CpuTime()*cpn);
97 sw.Start();
98 for (i=0;i<N;i++) {
99 x = r3->Rndm(i);
100 }
101 printf(" %8.3f",sw.CpuTime()*cpn);
102 // new random generators
103
104 sw.Start();
105 for (i=0;i<N;i++) {
106 x = r4->Rndm(i);
107 }
108 printf(" %8.3f",sw.CpuTime()*cpn);
109
110 sw.Start();
111 for (i=0;i<N;i++) {
112 x = r5->Rndm(i);
113 }
114 printf(" %8.3f",sw.CpuTime()*cpn);
115
116 sw.Start();
117 for (i=0;i<N;i++) {
118 x = r6->Rndm(i);
119 }
120 printf(" %8.3f",sw.CpuTime()*cpn);
121
122 sw.Start();
123 for (i=0;i<N;i++) {
124 x = r7->Rndm(i);
125 }
126 printf(" %8.3f",sw.CpuTime()*cpn);
127
128 sw.Start();
129 for (i=0;i<N;i++) {
130 x = r8->Rndm(i);
131 }
132 printf(" %8.3f",sw.CpuTime()*cpn);
133
134 sw.Start();
135 for (i=0;i<N;i++) {
136 x = r9->Rndm(i);
137 }
138 printf(" %8.3f",sw.CpuTime()*cpn);
139
140 sw.Start();
141 for (i=0;i<N1;i++) {
142 x = r10->Rndm(i);
143 }
144 printf(" %8.3f",sw.CpuTime()*cpn1);
145
146 printf("\n\n");
147
148 // RNDMARRAY
149
150 const int NR = 1000;
151 double rn[NR];
152 sw.Start();
153 for (i=0;i<N;i+=NR) {
154 r0->RndmArray(NR,rn);
155 }
156 printf("RndmArray......... %8.3f",sw.CpuTime()*cpn);
157 sw.Start();
158 for (i=0;i<N1;i+=NR) {
159 r1->RndmArray(NR,rn);
160 }
161 printf(" %8.3f",sw.CpuTime()*cpn1);
162 sw.Start();
163 for (i=0;i<N;i+=NR) {
164 r2->RndmArray(NR,rn);
165 }
166 printf(" %8.3f",sw.CpuTime()*cpn);
167 sw.Start();
168 for (i=0;i<N;i+=NR) {
169 r3->RndmArray(NR,rn);
170 }
171 printf(" %8.3f",sw.CpuTime()*cpn);
172 sw.Start();
173 for (i=0;i<N;i+=NR) {
174 r4->RndmArray(NR,rn);
175 }
176 printf(" %8.3f",sw.CpuTime()*cpn);
177 sw.Start();
178 for (i=0;i<N;i+=NR) {
179 r5->RndmArray(NR,rn);
180 }
181 printf(" %8.3f",sw.CpuTime()*cpn);
182 sw.Start();
183 for (i=0;i<N;i+=NR) {
184 r6->RndmArray(NR,rn);
185 }
186 printf(" %8.3f",sw.CpuTime()*cpn);
187 sw.Start();
188 for (i=0;i<N;i+=NR) {
189 r7->RndmArray(NR,rn);
190 }
191 printf(" %8.3f",sw.CpuTime()*cpn);
192 sw.Start();
193 for (i=0;i<N;i+=NR) {
194 r8->RndmArray(NR,rn);
195 }
196 printf(" %8.3f",sw.CpuTime()*cpn);
197 sw.Start();
198 for (i=0;i<N;i+=NR) {
199 r9->RndmArray(NR,rn);
200 }
201 printf(" %8.3f",sw.CpuTime()*cpn);
202 sw.Start();
203 for (i=0;i<N1;i+=NR) {
204 r10->RndmArray(NR,rn);
205 }
206 printf(" %8.3f\n",sw.CpuTime()*cpn1);
207
208 // Gaus
209
210 sw.Start();
211 for (i=0;i<N;i++) {
212 x = r0->Gaus(0,1);
213 }
214 printf("Gaus.............. %8.3f",sw.CpuTime()*cpn);
215 sw.Start();
216 for (i=0;i<N1;i++) {
217 x = r1->Gaus(0,1);
218 }
219 printf(" %8.3f",sw.CpuTime()*cpn1);
220 sw.Start();
221 for (i=0;i<N;i++) {
222 x = r2->Gaus(0,1);
223 }
224 printf(" %8.3f",sw.CpuTime()*cpn);
225 sw.Start();
226 for (i=0;i<N;i++) {
227 x = r3->Gaus(0,1);
228 }
229 printf(" %8.3f",sw.CpuTime()*cpn);
230 sw.Start();
231 for (i=0;i<N;i++) {
232 x = r4->Gaus(0,1);
233 }
234 printf(" %8.3f",sw.CpuTime()*cpn);
235 sw.Start();
236 for (i=0;i<N;i++) {
237 x = r5->Gaus(0,1);
238 }
239 printf(" %8.3f",sw.CpuTime()*cpn);
240 sw.Start();
241 for (i=0;i<N;i++) {
242 x = r6->Gaus(0,1);
243 }
244 printf(" %8.3f",sw.CpuTime()*cpn);
245 sw.Start();
246 for (i=0;i<N;i++) {
247 x = r7->Gaus(0,1);
248 }
249 printf(" %8.3f",sw.CpuTime()*cpn);
250 sw.Start();
251 for (i=0;i<N;i++) {
252 x = r8->Gaus(0,1);
253 }
254 printf(" %8.3f",sw.CpuTime()*cpn);
255 sw.Start();
256 for (i=0;i<N;i++) {
257 x = r9->Gaus(0,1);
258 }
259 printf(" %8.3f\n",sw.CpuTime()*cpn);
260
261
262 // RANNOR
263
264 sw.Start();
265 for (i=0;i<N;i+=2) {
266 r0->Rannor(x,y);
267 }
268 printf("Rannor............ %8.3f",sw.CpuTime()*cpn);
269 sw.Start();
270 for (i=0;i<N1;i+=2) {
271 r1->Rannor(x,y);
272 }
273 printf(" %8.3f",sw.CpuTime()*cpn1);
274 sw.Start();
275 for (i=0;i<N;i+=2) {
276 r2->Rannor(x,y);
277 }
278 printf(" %8.3f",sw.CpuTime()*cpn);
279 sw.Start();
280 for (i=0;i<N;i+=2) {
281 r3->Rannor(x,y);
282 }
283 printf(" %8.3f",sw.CpuTime()*cpn);
284 sw.Start();
285 for (i=0;i<N;i+=2) {
286 r4->Rannor(x,y);
287 }
288 printf(" %8.3f",sw.CpuTime()*cpn);
289 sw.Start();
290 for (i=0;i<N;i+=2) {
291 r5->Rannor(x,y);
292 }
293 printf(" %8.3f",sw.CpuTime()*cpn);
294 sw.Start();
295 for (i=0;i<N;i+=2) {
296 r6->Rannor(x,y);
297 }
298 printf(" %8.3f",sw.CpuTime()*cpn);
299 sw.Start();
300 for (i=0;i<N;i+=2) {
301 r7->Rannor(x,y);
302 }
303 printf(" %8.3f",sw.CpuTime()*cpn);
304 sw.Start();
305 for (i=0;i<N;i+=2) {
306 r8->Rannor(x,y);
307 }
308 printf(" %8.3f",sw.CpuTime()*cpn);
309 sw.Start();
310 for (i=0;i<N;i+=2) {
311 r9->Rannor(x,y);
312 }
313 printf(" %8.3f\n",sw.CpuTime()*cpn);
314
315 // Landau
316
317 sw.Start();
318 for (i=0;i<N;i++) {
319 x = r0->Landau(0,1);
320 }
321 printf("Landau............ %8.3f",sw.CpuTime()*cpn);
322 sw.Start();
323 for (i=0;i<N1;i++) {
324 x = r1->Landau(0,1);
325 }
326 printf(" %8.3f",sw.CpuTime()*cpn1);
327 sw.Start();
328 for (i=0;i<N;i++) {
329 x = r2->Landau(0,1);
330 }
331 printf(" %8.3f",sw.CpuTime()*cpn);
332 sw.Start();
333 for (i=0;i<N;i++) {
334 x = r3->Landau(0,1);
335 }
336 printf(" %8.3f\n",sw.CpuTime()*cpn);
337
338 sw.Start();
339 for (i=0;i<N;i++) {
340 x = r0->Exp(1);
341 }
342 printf("Exponential....... %8.3f",sw.CpuTime()*cpn);
343 sw.Start();
344 for (i=0;i<N1;i++) {
345 x = r1->Exp(1);
346 }
347 printf(" %8.3f",sw.CpuTime()*cpn1);
348 sw.Start();
349 for (i=0;i<N;i++) {
350 x = r2->Exp(1);
351 }
352 printf(" %8.3f",sw.CpuTime()*cpn);
353 sw.Start();
354 for (i=0;i<N;i++) {
355 x = r3->Exp(1);
356 }
357 printf(" %8.3f\n",sw.CpuTime()*cpn);
358
359 sw.Start();
360 for (i=0;i<N;i++) {
361 x = r0->Binomial(5,0.5);
362 }
363 printf("Binomial(5,0.5)... %8.3f",sw.CpuTime()*cpn);
364 sw.Start();
365 for (i=0;i<N1;i++) {
366 x = r1->Binomial(5,0.5);
367 }
368 printf(" %8.3f",sw.CpuTime()*cpn1);
369 sw.Start();
370 for (i=0;i<N;i++) {
371 x = r2->Binomial(5,0.5);
372 }
373 printf(" %8.3f",sw.CpuTime()*cpn);
374 sw.Start();
375 for (i=0;i<N;i++) {
376 x = r3->Binomial(5,0.5);
377 }
378 printf(" %8.3f\n",sw.CpuTime()*cpn);
379
380 sw.Start();
381 for (i=0;i<N;i++) {
382 x = r0->Binomial(15,0.5);
383 }
384 printf("Binomial(15,0.5).. %8.3f",sw.CpuTime()*cpn);
385 sw.Start();
386 for (i=0;i<N1;i++) {
387 x = r1->Binomial(15,0.5);
388 }
389 printf(" %8.3f",sw.CpuTime()*cpn1);
390 sw.Start();
391 for (i=0;i<N;i++) {
392 x = r2->Binomial(15,0.5);
393 }
394 printf(" %8.3f",sw.CpuTime()*cpn);
395 sw.Start();
396 for (i=0;i<N;i++) {
397 x = r3->Binomial(15,0.5);
398 }
399 printf(" %8.3f\n",sw.CpuTime()*cpn);
400
401 sw.Start();
402 for (i=0;i<N;i++) {
403 x = r0->Poisson(3);
404 }
405 printf("Poisson(3)........ %8.3f",sw.CpuTime()*cpn);
406 sw.Start();
407 for (i=0;i<N1;i++) {
408 x = r1->Poisson(3);
409 }
410 printf(" %8.3f",sw.CpuTime()*cpn1);
411 sw.Start();
412 for (i=0;i<N;i++) {
413 x = r2->Poisson(3);
414 }
415 printf(" %8.3f",sw.CpuTime()*cpn);
416 sw.Start();
417 for (i=0;i<N;i++) {
418 x = r3->Poisson(3);
419 }
420 printf(" %8.3f\n",sw.CpuTime()*cpn);
421
422 sw.Start();
423 for (i=0;i<N;i++) {
424 x = r0->Poisson(10);
425 }
426 printf("Poisson(10)....... %8.3f",sw.CpuTime()*cpn);
427 sw.Start();
428 for (i=0;i<N1;i++) {
429 x = r1->Poisson(10);
430 }
431 printf(" %8.3f",sw.CpuTime()*cpn1);
432 sw.Start();
433 for (i=0;i<N;i++) {
434 x = r2->Poisson(10);
435 }
436 printf(" %8.3f",sw.CpuTime()*cpn);
437 sw.Start();
438 for (i=0;i<N;i++) {
439 x = r3->Poisson(10);
440 }
441 printf(" %8.3f\n",sw.CpuTime()*cpn);
442
443 sw.Start();
444 for (i=0;i<N;i++) {
445 x = r0->Poisson(70);
446 }
447 printf("Poisson(70)....... %8.3f",sw.CpuTime()*cpn);
448 sw.Start();
449 for (i=0;i<N1;i++) {
450 x = r1->Poisson(70);
451 }
452 printf(" %8.3f",sw.CpuTime()*cpn1);
453 sw.Start();
454 for (i=0;i<N;i++) {
455 x = r2->Poisson(70);
456 }
457 printf(" %8.3f",sw.CpuTime()*cpn);
458 sw.Start();
459 for (i=0;i<N;i++) {
460 x = r3->Poisson(70);
461 }
462 printf(" %8.3f\n",sw.CpuTime()*cpn);
463
464 sw.Start();
465 for (i=0;i<N;i++) {
466 x = r0->Poisson(100);
467 }
468 printf("Poisson(100)...... %8.3f",sw.CpuTime()*cpn);
469 sw.Start();
470 for (i=0;i<N1;i++) {
471 x = r1->Poisson(100);
472 }
473 printf(" %8.3f",sw.CpuTime()*cpn1);
474 sw.Start();
475 for (i=0;i<N;i++) {
476 x = r2->Poisson(100);
477 }
478 printf(" %8.3f",sw.CpuTime()*cpn);
479 sw.Start();
480 for (i=0;i<N;i++) {
481 x = r3->Poisson(100);
482 }
483 printf(" %8.3f\n",sw.CpuTime()*cpn);
484
485 TF1 *f1 = new TF1("f1","gaus",-4,4);
486 f1->SetParameters(1,0,1);
487 gRandom = r0;
488 sw.Start();
489 for (i=0;i<N;i++) {
490 x = f1->GetRandom();
491 }
492 printf("GausTF1........... %8.3f",sw.CpuTime()*cpn);
493 gRandom = r1;
494 sw.Start();
495 for (i=0;i<N;i++) {
496 x = f1->GetRandom();
497 }
498 printf(" %8.3f",sw.CpuTime()*cpn);
499 gRandom = r2;
500 sw.Start();
501 for (i=0;i<N;i++) {
502 x = f1->GetRandom();
503 }
504 printf(" %8.3f",sw.CpuTime()*cpn);
505 gRandom = r3;
506 sw.Start();
507 for (i=0;i<N;i++) {
508 x = f1->GetRandom();
509 }
510 printf(" %8.3f\n",sw.CpuTime()*cpn);
511
512 TF1 *f2 = new TF1("f2","landau",-5,15);
513 f2->SetParameters(1,0,1);
514
515 gRandom = r0;
516 sw.Start();
517 for (i=0;i<N;i++) {
518 x = f2->GetRandom();
519 }
520 printf("LandauTF1......... %8.3f",sw.CpuTime()*cpn);
521 gRandom = r1;
522 sw.Start();
523 for (i=0;i<N;i++) {
524 x = f2->GetRandom();
525 }
526 printf(" %8.3f",sw.CpuTime()*cpn);
527 gRandom = r2;
528 sw.Start();
529 for (i=0;i<N;i++) {
530 x = f2->GetRandom();
531 }
532 printf(" %8.3f",sw.CpuTime()*cpn);
533 gRandom = r3;
534 sw.Start();
535 for (i=0;i<N;i++) {
536 x = f2->GetRandom();
537 }
538 printf(" %8.3f\n",sw.CpuTime()*cpn);
539
540 // test using Unuran
541#if __has_include("TUnuran.h")
542 TUnuran unr0(r0);
543 TUnuran unr1(r1);
544 TUnuran unr2(r2);
545 TUnuran unr3(r3);
546
547 // continuous distribution (ex. Gaus)
549 // use arou method (is probably the fastest)
550 unr0.Init(dist,"arou");
551 unr1.Init(dist,"arou");
552 unr2.Init(dist,"arou");
553 unr3.Init(dist,"arou");
554
555 sw.Start();
556 for (i=0;i<N;i++) {
557 x = unr0.Sample();
558 }
559 printf("GausUNURAN........ %8.3f",sw.CpuTime()*cpn);
560 sw.Start();
561 for (i=0;i<N;i++) {
562 x = unr1.Sample();
563 }
564 printf(" %8.3f",sw.CpuTime()*cpn);
565 sw.Start();
566 for (i=0;i<N;i++) {
567 x = unr2.Sample();
568 }
569 printf(" %8.3f",sw.CpuTime()*cpn);
570 sw.Start();
571 for (i=0;i<N;i++) {
572 x = unr3.Sample();
573 }
574 printf(" %8.3f\n",sw.CpuTime()*cpn);
575
576 // Poisson (need to initialize before with Poisson mu value)
577
578 unr0.InitPoisson(10);
579 unr1.InitPoisson(10);
580 unr2.InitPoisson(10);
581 unr3.InitPoisson(10);
582
583 sw.Start();
584 for (i=0;i<N;i++) {
585 x = unr0.SampleDiscr();
586 }
587 printf("PoissonUNURAN(10). %8.3f",sw.CpuTime()*cpn);
588 sw.Start();
589 for (i=0;i<N;i++) {
590 x = unr1.SampleDiscr();
591 }
592 printf(" %8.3f",sw.CpuTime()*cpn);
593 sw.Start();
594 for (i=0;i<N;i++) {
595 x = unr2.SampleDiscr();
596 }
597 printf(" %8.3f",sw.CpuTime()*cpn);
598 sw.Start();
599 for (i=0;i<N;i++) {
600 x = unr3.SampleDiscr();
601 }
602 printf(" %8.3f\n",sw.CpuTime()*cpn);
603
604 unr0.InitPoisson(100);
605 unr1.InitPoisson(100);
606 unr2.InitPoisson(100);
607 unr3.InitPoisson(100);
608
609 sw.Start();
610 for (i=0;i<N;i++) {
611 x = unr0.SampleDiscr();
612 }
613 printf("PoissonUNURAN(100) %8.3f",sw.CpuTime()*cpn);
614 sw.Start();
615 for (i=0;i<N;i++) {
616 x = unr1.SampleDiscr();
617 }
618 printf(" %8.3f",sw.CpuTime()*cpn);
619 sw.Start();
620 for (i=0;i<N;i++) {
621 x = unr2.SampleDiscr();
622 }
623 printf(" %8.3f",sw.CpuTime()*cpn);
624 sw.Start();
625 for (i=0;i<N;i++) {
626 x = unr3.SampleDiscr();
627 }
628 printf(" %8.3f\n",sw.CpuTime()*cpn);
629#endif
630
631 delete r0;
632 delete r1;
633 delete r2;
634 delete r3;
635 delete r4;
636 delete r5;
637 delete r6;
638 delete r7;
639 delete r8;
640 delete r9;
641 delete r10;
642 gRandom = rsave;
643
644#ifdef LATER
645#if __has_include("TUnuran.h")
646 // Binomial
647 unr0.InitBinomial(15,0.5);
648 unr1.InitBinomial(15,0.5);
649 unr2.InitBinomial(15,0.5);
650 unr3.InitBinomial(15,0.5);
651
652 sw.Start();
653 for (i=0;i<N;i++) {
654 x = unr0.SampleDiscr();
655 }
656 printf("BinomialUN(15,0.5) %8.3f",sw.CpuTime()*cpn);
657 sw.Start();
658 for (i=0;i<N;i++) {
659 x = unr1.SampleDiscr();
660 }
661 printf(" %8.3f",sw.CpuTime()*cpn);
662 sw.Start();
663 for (i=0;i<N;i++) {
664 x = unr2.SampleDiscr();
665 }
666 printf(" %8.3f",sw.CpuTime()*cpn);
667 sw.Start();
668 for (i=0;i<N;i++) {
669 x = unr3.SampleDiscr();
670 }
671 printf(" %8.3f\n",sw.CpuTime()*cpn);
672#endif
673#endif
674
675}
676
677int testRandom3() {
678
679 Float_t RefValue[] = // running using a seed of 4357 ROOT 5.13.07 and checked with GSL 1.8
680 { 0.999741749, 0.162909875, 0.282617805, 0.947201082, 0.231656543, 0.484973614, 0.957476957, 0.744305343,
681 0.540043658, 0.739952981, 0.759943798, 0.658636614, 0.315637622, 0.804403015, 0.519672115, 0.168572422,
682 0.47552973, 0.392313994, 0.221667687, 0.213190459,0.0303352042, 0.33353925, 0.194148851, 0.943716781,
683 0.579931675, 0.898304858, 0.665563931, 0.49861031, 0.560628257, 0.182284646, 0.296525531, 0.117408933,
684 0.0629176658, 0.648125575, 0.725418529, 0.637131158, 0.713885062,0.0995762432, 0.699267196, 0.10781247,
685 0.129242751, 0.502403039, 0.207779906, 0.288910306,0.0831747944, 0.128124215, 0.547371411,0.0823195996,
686 0.292141427, 0.891623737, 0.227117839, 0.431845463, 0.140733001, 0.400392135, 0.686946901, 0.170670911,
687 0.440820868, 0.045336565, 0.311296414, 0.506181051, 0.18241084, 0.511032015, 0.740788205, 0.365988627,
688 0.160808837, 0.460106785, 0.627836472, 0.677603688, 0.698196523, 0.478536868,0.0901075942, 0.338728522,
689 0.0952137967, 0.436541964, 0.474673352, 0.419245926, 0.777536852, 0.624610565, 0.98043655, 0.370430201,
690 0.830812636, 0.140806447, 0.744085307, 0.82973968, 0.391104318, 0.621956392, 0.346699478,0.0461695245,
691 0.613066321, 0.567374048, 0.498894026, 0.723802079, 0.144550525,0.0423031633, 0.310787023, 0.121641154,
692 0.242069671, 0.381058855, 0.440128537, 0.599795902, 0.644574654, 0.432626217, 0.555968262, 0.716841168,
693 0.642362515, 0.685776725,0.0961581462, 0.122933464,0.0569974151, 0.820072044, 0.125539286, 0.315745071,
694 0.180566925, 0.142227219, 0.664429613, 0.685189223, 0.191001933, 0.436343019, 0.964459225, 0.86816359,
695 0.130879965, 0.48444228, 0.374654451, 0.900475122, 0.178656787, 0.679635131, 0.62287431, 0.98365595,
696 0.44071478, 0.804737277, 0.994845061, 0.541550961, 0.255905455, 0.638945635, 0.57591027, 0.25872142,
697 0.191593001, 0.445663047, 0.149266509, 0.996723689, 0.121762222, 0.65153928,0.0277950978, 0.389977602,
698 0.827913044, 0.283813907, 0.610203644, 0.23641275, 0.41082105, 0.677714617, 0.847126588, 0.649256228,
699 0.0813826511, 0.120830484, 0.479199264, 0.777878358, 0.471977701, 0.943337511, 0.980800992, 0.334554731,
700 0.202667924, 0.342841234, 0.653544244, 0.682758797, 0.60993614,0.0999271029, 0.766254981, 0.735581528,
701 0.24113914, 0.263178711, 0.960869899, 0.423395737, 0.336058146,0.000249497825, 0.868841017,0.00375315035,
702 0.165846311,0.0118208411, 0.606455074, 0.729972019, 0.613824557, 0.965768184, 0.497098261, 0.529885403,
703 0.461607532, 0.713033701, 0.579959768, 0.682802555, 0.953921514,0.0236552036, 0.280110147, 0.869526353,
704 0.299333274, 0.319553603, 0.300951709, 0.941111486, 0.848127064, 0.753346129, 0.538244087, 0.408481381,
705 0.212371316,0.0761404021, 0.289934908,0.0197818337, 0.241247899, 0.384619165, 0.454906886, 0.373982521,
706 0.440188796, 0.117896808, 0.805429845, 0.164892641, 0.282529936, 0.172685399, 0.93584233, 0.68095306,
707 0.133696739, 0.254761223, 0.399444876, 0.369235365, 0.726361892, 0.277837459, 0.693569104, 0.500354689,
708 0.118405538, 0.151303335, 0.681446943, 0.720665918, 0.979646939, 0.696779111, 0.557210072, 0.680821482,
709 0.95535205, 0.598208956, 0.770453895, 0.913597486, 0.658958649, 0.670974613, 0.578185175, 0.95303929,
710 0.162923458, 0.335056986, 0.951824704, 0.109661644, 0.619302303, 0.956816742, 0.985243094,0.0707377489,
711 0.50233039, 0.680721226, 0.553320066, 0.587005581, 0.691620562, 0.46264791, 0.574254294, 0.072890088,
712 0.638266518, 0.387757288, 0.220960217,0.00223180233, 0.495656775, 0.191316523, 0.022265008, 0.903589021,
713 0.738628175, 0.44453089, 0.417702243, 0.760861122, 0.437753222, 0.190982861, 0.577112962, 0.132688343,
714 0.317824347, 0.48691649, 0.939091069, 0.933946281, 0.073660135, 0.612436295, 0.514748724, 0.624663582,
715 0.130645262, 0.645210441, 0.13414855, 0.652925968, 0.265210009, 0.381805269, 0.59021506, 0.669704082,
716 0.55433248,0.0195047602, 0.184346962, 0.991180462, 0.573677764, 0.637762085, 0.594857598, 0.515244688,
717 0.330693509, 0.39674245, 0.88396548, 0.771485266, 0.599075381,0.0247266297,0.0122587895, 0.698452319,
718 0.265991009, 0.736700721, 0.999972619, 0.749792316, 0.484955589, 0.823700529, 0.62277709, 0.902512094,
719 0.0565051287, 0.739077389, 0.37617622, 0.036800765, 0.776198219, 0.837354186, 0.34508193,0.0818426476,
720 0.222621545, 0.152476319, 0.401177195, 0.531612608, 0.811706602,0.0407775661, 0.117889008, 0.575189965,
721 0.832362208, 0.204641853, 0.238721773, 0.9969287, 0.258590596, 0.892055968, 0.846859788, 0.306583706,
722 0.0333624918, 0.706420498, 0.193615608, 0.508978138,0.0215451468, 0.672732793, 0.813562444, 0.807284052,
723 0.481526843, 0.537519095, 0.780848606, 0.335848908, 0.699259371, 0.425855299, 0.825240663, 0.945613692,
724 0.55484125, 0.710495188, 0.378360366, 0.648338731,0.0456727168, 0.155477323, 0.885353968, 0.721565725,
725 0.961667201, 0.430300885, 0.132031354, 0.439331209, 0.467187736, 0.410083217, 0.277196711, 0.278509559,
726 0.954620806, 0.804357491, 0.968510466, 0.999722791, 0.947160283, 0.248551138,0.0067049861, 0.444727315,
727 0.674048778, 0.496480361,0.0210092501, 0.831763222, 0.108545852,0.0931516394, 0.89020564, 0.445945211,
728 0.906906768, 0.554039821, 0.759434349, 0.815551384, 0.532968503,0.0551351462,0.0539856541, 0.89918819,
729 0.146907374, 0.482647314,0.0673029809, 0.281161865, 0.932849165, 0.507317933, 0.564503014, 0.8007132,
730 0.645887499, 0.309219498,0.0478066066, 0.25196583, 0.713881142, 0.670994017, 0.60528576, 0.148271899,
731 0.79525035, 0.665277353, 0.854302043, 0.810533677,0.0711439839,0.0687935678, 0.890466573, 0.758045957,
732 0.0703105873, 0.852094478, 0.775356902, 0.684895203, 0.234552787, 0.461575694, 0.936435457, 0.664946419,
733 0.45967959, 0.88782351, 0.574622261,0.0301686234, 0.767354721, 0.345478555, 0.609123143, 0.21754287,
734 0.643760561, 0.571392649, 0.802311049, 0.962335547, 0.401769856, 0.996553418, 0.745945812, 0.448411183,
735 0.39578428, 0.123389926, 0.532614913, 0.833379602, 0.91767313, 0.825607567, 0.4459154, 0.267136201,
736 0.6643989, 0.766860694, 0.665968275, 0.503955105, 0.835153702, 0.622405379, 0.457538918, 0.554983278,
737 0.36581371, 0.656302231, 0.917038669, 0.276054591, 0.121214441, 0.966178254, 0.697439008, 0.443547789,
738 0.630195824, 0.368346675, 0.238191956, 0.300273821, 0.710332172,0.0474748381, 0.492525443,0.0812539798,
739 0.122016782, 0.99310218, 0.355091027, 0.764863731, 0.904099543, 0.396109613, 0.817134856, 0.348974222,
740 0.266193634, 0.367501958, 0.752316213, 0.587800024, 0.489421095, 0.673474061, 0.328296139, 0.853945839,
741 0.832380736, 0.159588686, 0.322411022, 0.950173707, 0.095376712, 0.231019855, 0.860607752, 0.359627192,
742 0.984843699,0.0319756679, 0.828649914, 0.51680949, 0.489407924, 0.963977298, 0.960131739, 0.681816791,
743 0.860788169, 0.455829282, 0.332390656,0.0591498043, 0.452245977, 0.217354216, 0.34560744, 0.549971993,
744 0.317622252, 0.892976443, 0.49004545, 0.25647901, 0.968998638, 0.910636465, 0.226717598, 0.327828572,
745 0.28670209, 0.142515054,0.0992817392, 0.192332409, 0.308376869, 0.871415959, 0.391148786, 0.788660882,
746 0.200816041, 0.986475959, 0.882862126, 0.109862451, 0.354283255, 0.555742682, 0.690698458, 0.643815752,
747 0.363104285,0.0788627111, 0.200820414, 0.71697353, 0.744353746, 0.76763643, 0.245442451, 0.668009119,
748 0.886989377, 0.366849931, 0.531556628, 0.502843979, 0.31454367, 0.622541364,0.0199038582, 0.676355134,
749 0.429818622, 0.232835212, 0.987619457, 0.306572135, 0.494637038, 0.748614893, 0.891843561,0.0452854959,
750 0.427561072, 0.226978442, 0.484072985, 0.16464563,0.0898074883, 0.384263737,0.0238354723, 0.329734547,
751 0.531230736, 0.476683361, 0.877482474, 0.455501628, 0.497302495, 0.396184301, 0.886124728, 0.736070092,
752 0.108917595, 0.397921902, 0.842575021, 0.82620032, 0.936655165, 0.24558961, 0.639688616, 0.493335031,
753 0.0734495069, 0.780138101,0.0421121232, 0.701116477, 0.940523267, 0.70054817, 0.776760272, 0.192742581,
754 0.0069252688, 0.842983626, 0.919324176, 0.242083269, 0.190100674, 0.735084639, 0.164522319, 0.99030645,
755 0.98284794, 0.657169539,0.0187736442, 0.759596482, 0.357567611, 0.509016344, 0.738899681, 0.567923164,
756 0.289056634, 0.41501714, 0.981054561, 0.365884479, 0.517878261, 0.844209022, 0.968122653, 0.258894528,
757 0.478310441, 0.437340986, 0.379398001, 0.203081884, 0.550820748, 0.255542723, 0.550098031, 0.870477939,
758 0.241230214, 0.157108238, 0.218260827, 0.116277737, 0.749018275, 0.158290659, 0.476353907, 0.545327323,
759 0.878978121,0.0171442169, 0.542981987, 0.318018082, 0.788805343, 0.871721374, 0.738490409,0.0923330146,
760 0.301398643, 0.637103286, 0.571564271, 0.712810342, 0.644289242, 0.230476008, 0.971695586, 0.966159428,
761 0.291883909, 0.175285818, 0.312882552, 0.98465128, 0.568391354, 0.844468564, 0.144433908, 0.45994061,
762 0.607897905, 0.184122705, 0.342805493, 0.606432998, 0.838196585, 0.186188518,0.0302744689, 0.307391858,
763 0.125286029, 0.270394965, 0.874161481, 0.370509557, 0.89423337, 0.407995674, 0.881878469, 0.647951238,
764 0.236986727, 0.528807336, 0.293731542,0.0943204253, 0.934538626, 0.121679332, 0.34968176,0.0670268578,
765 0.642196769, 0.692447138, 0.334926733, 0.374244194, 0.313885051, 0.538738295, 0.098592523, 0.490514225,
766 0.32873567, 0.709725794, 0.88169803, 0.393000481, 0.854243273, 0.463776593, 0.52705639, 0.493309892,
767 0.267784336, 0.583077476,0.0573514167, 0.959336368, 0.771417173,0.0427184631, 0.498433369,0.0522942701,
768 0.56155145, 0.960361909, 0.619817314, 0.528628368, 0.698235179, 0.186162042, 0.553998168, 0.666120292,
769 0.152731049, 0.948750157, 0.186825789, 0.580512664, 0.851024442, 0.106865844, 0.675861737, 0.79604524,
770 0.657646103,0.00934952381, 0.206267588, 0.636420368,0.0382564603, 0.67771025, 0.677917925, 0.671684269,
771 0.396317716, 0.661597047, 0.633360383, 0.962124239, 0.992711418,0.0993448263,0.0678932741, 0.426013152,
772 0.947045502, 0.708326009, 0.466817846,0.0448362886, 0.748580922, 0.678370694, 0.210921343, 0.398490306,
773 0.953675585,0.0289022848, 0.935766569, 0.846930474, 0.662760176, 0.867910903, 0.652359324, 0.45280494,
774 0.305228982, 0.352034987, 0.279643402, 0.236045594,0.0270034608, 0.652062389, 0.712000227, 0.619930867,
775 0.125439078, 0.452789963, 0.92233151, 0.120844359, 0.403808975, 0.260290446, 0.778843638, 0.6678412,
776 0.0267894373, 0.491332301, 0.915060888, 0.704025347, 0.628200853, 0.578338467, 0.629156416, 0.730410649,
777 0.641318334, 0.463709335, 0.614291239, 0.254470656, 0.808682692, 0.22898373, 0.450477996, 0.874235142,
778 0.202773906, 0.523711192, 0.126518266, 0.579402899, 0.26188467, 0.207769057, 0.55283816, 0.851395364,
779 0.513594437, 0.558259845, 0.666148535, 0.998974657, 0.178274074, 0.116739636,0.0684255431, 0.622713377,
780 0.31448295, 0.889827933, 0.80647766, 0.429916949, 0.524695458, 0.45267553, 0.630743121, 0.566594485,
781 0.958860663, 0.908052286, 0.700898262, 0.377025384, 0.683796226, 0.198088462, 0.617400699, 0.413726158,
782 0.823588417, 0.755577948, 0.703097317, 0.364294278, 0.819786986, 0.751581763, 0.048769509, 0.528569003,
783 0.616748192, 0.270942831, 0.800841747, 0.235174223, 0.903786552, 0.258801569, 0.191336412, 0.012410342,
784 0.853413998, 0.621008712, 0.855861931, 0.140106201, 0.872687964, 0.708839735,0.0926409892,0.0207504195,
785 0.782636518,0.0300825236, 0.504610632,0.0816221782, 0.773493745, 0.872577282, 0.880031248, 0.883524299,
786 0.872427328, 0.458722225, 0.902298841, 0.547904952,0.0559884352, 0.591179888, 0.563941709, 0.776130076,
787 0.295569778,0.0408536533, 0.398567183, 0.28227462, 0.806716321, 0.507159362, 0.688150965, 0.49466404,
788 0.45454604, 0.421480091,0.0392517329,0.0911962031, 0.393815309, 0.135373195, 0.968650583, 0.811676111,
789 0.325965411, 0.961999178, 0.100281202, 0.102924612, 0.30725909, 0.33368206, 0.857966134, 0.522921736,
790 0.615500041, 0.981558684, 0.797484739, 0.198809674, 0.45670419, 0.570970797, 0.214908696, 0.686433314,
791 0.278602115, 0.179739848, 0.397497946, 0.162858935, 0.802621762,0.0836459133, 0.638270752, 0.230856518,
792 0.580094379, 0.864292514, 0.932738287, 0.821393124, 0.480590473, 0.636373016, 0.181508656, 0.469200501,
793 0.309276441, 0.668810431, 0.722341161, 0.574856669, 0.527854513, 0.809231559, 0.986882661, 0.323860496,
794 0.606396459, 0.759558966, 0.79096818,0.0699298142, 0.550465414,0.00929828244, 0.784629475, 0.689044114,
795 0.963588091, 0.516441598, 0.357178305, 0.482336892, 0.429959602, 0.996306147, 0.601176011, 0.785004207,
796 0.970542121, 0.487854549,0.0949267522, 0.979331773, 0.120877739, 0.630260336, 0.19424754, 0.213081703,
797 0.0145987798, 0.366671115, 0.340100777, 0.721786347, 0.367533113,0.0210335371, 0.131687992, 0.586759676,
798 0.73360464, 0.863635151, 0.136994646,0.0524269778, 0.406223408, 0.241656947, 0.472450703, 0.872215979,
799 0.454719233,0.0715790696, 0.314061244, 0.492823114, 0.741721134, 0.694783663, 0.982867872, 0.319748137,
800 0.804203704,0.0534678153, 0.746155348, 0.303474931,0.0930815139, 0.934531664, 0.746868186, 0.100048471,
801 0.720296508, 0.21075374, 0.96309675, 0.749189411, 0.739621932, 0.510072327,0.0872929865, 0.650020469,
802 0.0823648495, 0.726920745, 0.532618265, 0.749305866, 0.86126694,0.0346994482,0.0931224583, 0.655257095,
803 0.959517847, 0.487057231, 0.859895745, 0.084794421, 0.718541715, 0.850918328, 0.818884782, 0.71627446,
804 0.40822393, 0.63658567, 0.523838703, 0.372038872, 0.353426097, 0.598049047,0.0974868746, 0.276353038
805 };
806
807 Int_t rc1 = 0;
808 Int_t rc2 = 0;
809 TRandom3 r(4357);
810 Float_t x;
811 Int_t i;
812
813 // check whether the sequence is ok or not
814 for (i=0;i<1000;i++) {
815 x = r.Rndm();
816 // printf("%e ",x-RefValue[i]); if(i%8==7) printf("\n");
817 if (TMath::Abs(x-RefValue[i]) > 10e-8) {
818 printf("i=%d x=%.8f but should be %.8f\n",i,x,RefValue[i]);
819 rc1 += 1;
820 }
821 }
822
823 // check whether a state can be saved and restored
824 TFile *file = new TFile("random3.root","RECREATE");
825 file->SetCompressionLevel(0);
826 r.Write("r");
827 delete file;
828 file = new TFile("random3.root");
829 TRandom3 *rs = (TRandom3*) file->Get("r");
830 for (i=0;i<1000;i++) {
831 if (r.Rndm() - rs->Rndm() != 0) rc2 += 1;
832 }
833 if (rc2 != 0) printf("state restoration failed\n");
834
835 return rc1 + rc2;
836}
837
838
839void testrandom()
840{
841 testRandom3();
842 testAll();
843}
#define e(i)
Definition RSha256.hxx:103
int Int_t
Definition RtypesCore.h:45
float Float_t
Definition RtypesCore.h:57
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
#define N
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
R__EXTERN TRandom * gRandom
Definition TRandom.h:62
TObject * Get(const char *namecycle) override
Return pointer to object identified by namecycle.
1-Dim function class
Definition TF1.h:234
virtual Double_t GetRandom(TRandom *rng=nullptr, Option_t *opt=nullptr)
Return a random number following this function shape.
Definition TF1.cxx:2212
virtual void SetParameters(const Double_t *params)
Definition TF1.h:685
A ROOT file is an on-disk file, usually with extension .root, that stores objects in a file-system-li...
Definition TFile.h:131
virtual void SetCompressionLevel(Int_t level=ROOT::RCompressionSetting::ELevel::kUseMin)
See comments for function SetCompressionSettings.
Definition TFile.cxx:2360
The Ranlux Random number generator class.
Definition TRandom1.h:27
Random number generator class based on the maximally quidistributed combined Tausworthe generator by ...
Definition TRandom2.h:27
Random number generator class based on M.
Definition TRandom3.h:27
This is the base class for the ROOT Random number generators.
Definition TRandom.h:27
Stopwatch class.
Definition TStopwatch.h:28
TUnuranContDist class describing one dimensional continuous distribution.
TUnuran class.
Definition TUnuran.h:79
TRandomGen< ROOT::Math::MixMaxEngine< 240, 0 > > TRandomMixMax
MIXMAX generator based on a state of N=240.
Definition TRandomGen.h:105
TRandomGen< ROOT::Math::StdEngine< std::mt19937_64 > > TRandomMT64
Generator based on a the Mersenne-Twister generator with 64 bits, using the implementation provided b...
Definition TRandomGen.h:141
TRandomGen< ROOT::Math::MixMaxEngine< 256, 2 > > TRandomMixMax256
MIXMAX generator based on a state of N=256, based on the generator described in this paper:
Definition TRandomGen.h:130
TRandomGen< ROOT::Math::MixMaxEngine< 17, 0 > > TRandomMixMax17
MIXMAX generator based on a state of N=17.
Definition TRandomGen.h:116
TRandomGen< ROOT::Math::StdEngine< std::ranlux48 > > TRandomRanlux48
Generator based on a the RanLux generator with 48 bits, using the implementation provided by the stan...
Definition TRandomGen.h:149
Double_t y[n]
Definition legend1.C:17
Double_t x[n]
Definition legend1.C:17
TF1 * f1
Definition legend1.C:11
double dist(Rotation3D const &r1, Rotation3D const &r2)
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.
Definition TMathBase.h:123