-
-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathurng_default_mod.c
152 lines (128 loc) · 7.76 KB
/
urng_default_mod.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
/*****************************************************************************
* *
* UNURAN -- Universal Non-Uniform Random number generator *
* *
*****************************************************************************
* *
* FILE: urng_default.c *
* *
* routines to set, change and get the pointers to the *
* UNURAN default uniform random number generators. *
* *
*****************************************************************************
* *
* Copyright (c) 2000-2022 Wolfgang Hoermann and Josef Leydold *
* Department of Statistics and Mathematics, WU Wien, Austria *
* SPDX-License-Identifier: BSD-3-Clause *
* *
* *
*****************************************************************************
* *
* Modified for use in SciPy *
* *
*****************************************************************************/
/*---------------------------------------------------------------------------*/
#include <unur_source.h>
#include "urng.h"
/*---------------------------------------------------------------------------*/
/* pointer to default uniform random number generator */
static UNUR_URNG *urng_default = NULL;
static UNUR_URNG *urng_aux_default = NULL;
/*---------------------------------------------------------------------------*/
/*****************************************************************************/
/** **/
/** Main uniform random number generator **/
/** **/
/*****************************************************************************/
UNUR_URNG *
unur_get_default_urng( void )
/*----------------------------------------------------------------------*/
/* return default uniform random number generator */
/* (initialize generator if necessary) */
/* */
/* parameters: none */
/* */
/* return: */
/* pointer to default generator */
/* */
/* error: */
/* return NULL */
/*----------------------------------------------------------------------*/
{
/* default generator already running ? */
if( urng_default == NULL ) {
_unur_error("URNG",UNUR_ERR_NULL,"Default URNG not set. EXIT !!!");
/* we cannot recover from this error */
exit(EXIT_FAILURE);
}
/* return default generator */
return (urng_default);
} /* end of unur_get_default_urng() */
/*---------------------------------------------------------------------------*/
UNUR_URNG *
unur_set_default_urng( UNUR_URNG *urng_new )
/*----------------------------------------------------------------------*/
/* set default uniform random number generator and return old one */
/* */
/* parameters: pointer to new default uniform random number generator */
/* */
/* return: */
/* pointer to old uniform random number generator */
/*----------------------------------------------------------------------*/
{
UNUR_URNG *urng_old = urng_default;
/* NULL pointer not allowed */
_unur_check_NULL("URNG", urng_new, urng_default);
urng_default = urng_new; /* set urng */
/* return old default generator */
return (urng_old);
} /* end of unur_set_default_urng() */
/*****************************************************************************/
/** **/
/** Auxiliary uniform random number generator **/
/** **/
/*****************************************************************************/
UNUR_URNG *
unur_get_default_urng_aux( void )
/*----------------------------------------------------------------------*/
/* return default auxilliary uniform random number generator */
/* (initialize generator if necessary) */
/* */
/* parameters: none */
/* */
/* return: */
/* pointer to default auxilliary uniform generator */
/* */
/* error: */
/* return NULL */
/*----------------------------------------------------------------------*/
{
/* default generator already running ? */
if( urng_aux_default == NULL ) {
_unur_error("URNG",UNUR_ERR_NULL,"Default auxilliary URNG not set. EXIT !!!");
/* we cannot recover from this error */
exit(EXIT_FAILURE);
}
/* return default generator */
return (urng_aux_default);
} /* end of unur_get_default_urng_aux() */
/*---------------------------------------------------------------------------*/
UNUR_URNG *
unur_set_default_urng_aux( UNUR_URNG *urng_aux_new )
/*----------------------------------------------------------------------*/
/* set default auxilliary uniform RNG and return old one. */
/* */
/* parameters: pointer to new default auxilliary uniform RNG */
/* */
/* return: */
/* pointer to old auxilliary uniform RNG */
/*----------------------------------------------------------------------*/
{
UNUR_URNG *urng_aux_old = urng_aux_default;
/* NULL pointer not allowed */
_unur_check_NULL("URNG", urng_aux_new, urng_aux_default);
urng_aux_default = urng_aux_new; /* set auxilliary urng */
/* return old default generator */
return (urng_aux_old);
} /* end of unur_set_default_urng_aux() */
/*---------------------------------------------------------------------------*/