ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/random.h
Revision: 2.24
Committed: Thu Apr 21 02:52:40 2022 UTC (2 years ago) by greg
Content type: text/plain
Branch: MAIN
CVS Tags: rad5R4, HEAD
Changes since 2.23: +5 -3 lines
Log Message:
perf(cnt): improved randomness of cnt -s option with new irandom(modulus) call

File Contents

# User Rev Content
1 greg 2.24 /* RCSid $Id: random.h,v 2.23 2016/03/06 01:13:17 schorsch Exp $ */
2 greg 1.1 /*
3 greg 1.4 * random.h - header file for random(3) and urand() function.
4 greg 2.8 */
5 schorsch 2.12 #ifndef _RAD_RANDOM_H_
6     #define _RAD_RANDOM_H_
7 greg 2.22
8     #include <stdlib.h>
9    
10 schorsch 2.12 #ifdef __cplusplus
11     extern "C" {
12     #endif
13 greg 1.1
14 schorsch 2.23 #if defined(_WIN32) || defined(_WIN64)
15 greg 2.10 #if (RAND_MAX <= 65536)
16 greg 2.3 #define random() ((long)rand()<<16^(long)rand()<<6^(long)rand()>>4)
17 greg 2.10 #else
18     #define random() rand()
19     #endif
20 gwlarson 2.7 #define srandom(s) srand((unsigned)(s))
21 greg 2.2
22 greg 2.18 #define frandom() (rand()*(1./(RAND_MAX+.5)))
23 greg 2.2
24     #else
25 greg 1.3
26 greg 2.2 #define random() lrand48()
27 gwlarson 2.7 #define srandom(s) srand48((long)(s))
28 greg 2.2 #define frandom() drand48()
29 greg 1.3
30     #endif
31 greg 1.4
32 gregl 2.6 extern unsigned short *urperm;
33 greg 2.8 extern int urmask;
34 gregl 2.5
35 greg 2.20 #define urand(i) (urmask ? (urperm[(i)&urmask]+frandom())/(urmask+1.) \
36 greg 2.16 : frandom())
37 greg 2.8
38 greg 2.24 /* defined in urand.c */
39     extern long irandom(long modulus);
40    
41 greg 2.14 extern int initurand(int size);
42    
43 greg 2.8 extern int ilhash(int *d, int n);
44 greg 2.24
45 greg 2.8 extern int urind(int s, int i);
46     /* defined in multisamp.c */
47     extern void multisamp(double t[], int n, double r);
48 gregl 2.5
49 schorsch 2.12
50     #ifdef __cplusplus
51     }
52 greg 2.4 #endif
53 schorsch 2.12 #endif /* _RAD_RANDOM_H_ */
54