1 #ifndef BZ_RANDOM_UNIFORM_H
2 #define BZ_RANDOM_UNIFORM_H
21 const long double norm32open = .2328306436538696289062500000000000000000E-9L;
22 const long double norm64open = .5421010862427522170037264004349708557129E-19L;
23 const long double norm96open = .1262177448353618888658765704452457967477E-28L;
24 const long double norm128open = .2938735877055718769921841343055614194547E-38L;
27 template<
typename IRNG,
typename stateTag>
38 #if (FLT_MANT_DIG > 128) && !defined(BZ_IGNORE_RNG_ERRORS)
39 #error RNG code assumes float mantissa is <= 128 bits (not true for your platform). Use -DBZ_IGNORE_RNG_ERRORS to ignore this warning.
47 #elif FLT_MANT_DIG > 64
52 #elif FLT_MANT_DIG > 32
66 template<
typename IRNG,
typename stateTag>
76 #if (DBL_MANT_DIG > 128) && !defined(BZ_IGNORE_RNG_ERRORS)
77 #error RNG code assumes double mantissa is <= 128 bits (not true for your platform). Use -DBZ_IGNORE_RNG_ERRORS to ignore this warning.
86 #elif DBL_MANT_DIG > 64
91 #elif DBL_MANT_DIG > 32
105 template<
typename IRNG,
typename stateTag>
114 #if LDBL_MANT_DIG > 96
115 #if (LDBL_MANT_DIG > 128) && !defined(BZ_IGNORE_RNG_ERRORS)
116 #error RNG code assumes long double mantissa is <= 128 bits (not true for your platform). Use -DBZ_IGNORE_RNG_ERRORS to ignore this warning.
125 #elif LDBL_MANT_DIG > 64
130 #elif LDBL_MANT_DIG > 32
156 const long double norm32closed = .2328306437080797375431469961868475648078E-9L;
161 .23283064365386962891887177448353618888727188481031E-9L;
163 .54210108624275221703311375920552804341370213034169E-19L;
166 const long double norm96closed1 = .2328306436538696289062500000029387358771E-9L;
168 .5421010862427522170037264004418131333707E-19L;
170 .1262177448353618888658765704468388886588E-28L;
174 const long double norm128clos1 = .2328306436538696289062500000000000000007E-9L;
175 const long double norm128clos2 = .5421010862427522170037264004349708557145E-19L;
176 const long double norm128clos3 = .1262177448353618888658765704452457967481E-28L;
177 const long double norm128clos4 = .2938735877055718769921841343055614194555E-38L;
180 template<
typename T = double,
typename IRNG =
defaultIRNG,
184 template<
typename IRNG,
typename stateTag>
193 #if (FLT_MANT_DIG > 128) && !defined(BZ_IGNORE_RNG_ERRORS)
194 #error RNG code assumes float mantissa is <= 128 bits (not true for your platform). Use -DBZ_IGNORE_RNG_ERRORS to ignore this warning.
203 #elif FLT_MANT_DIG > 64
210 #elif FLT_MANT_DIG > 32
226 template<
typename IRNG,
typename stateTag>
234 #if DBL_MANT_DIG > 96
235 #if (DBL_MANT_DIG > 128) && !defined(BZ_IGNORE_RNG_ERRORS)
236 #error RNG code assumes double mantissa is <= 128 bits (not true for your platform). Use -DBZ_IGNORE_RNG_ERRORS to ignore this warning.
245 #elif DBL_MANT_DIG > 64
252 #elif DBL_MANT_DIG > 32
268 template<
typename IRNG,
typename stateTag>
277 #if LDBL_MANT_DIG > 96
278 #if (LDBL_MANT_DIG > 128) && !defined(BZ_IGNORE_RNG_ERRORS)
279 #error RNG code assumes long double mantissa is <= 128 bits (not true for your platform). Use -DBZ_IGNORE_RNG_ERRORS to ignore this warning.
288 #elif LDBL_MANT_DIG > 64
295 #elif LDBL_MANT_DIG > 32
306 long double getUniform()
315 template<
typename T = double,
typename IRNG =
defaultIRNG,
342 template<
typename T = double,
typename IRNG =
defaultIRNG,
362 #endif // BZ_RANDOM_UNIFORM_H