cc [ flags ] -I/usr/local/include file(s) -L/usr/local/lib -lmcw [ ... ] #include <mathcw.h> extern float urcwf_r (void); extern double urcw_r (void); extern long double urcwl_r (void); extern __float80 urcww_r (void); extern __float128 urcwq_r (void); extern long_long_double urcwll_r (void); extern decimal_float urcwdf_r (void); extern decimal_double urcwd_r (void); extern decimal_long_double urcwdl_r (void); extern decimal_long_long_double urcwdll_r (void);
NB: Functions with prototypes containing underscores in type names may be available only with certain extended compilers.
This function is equivalent to urcw4(3CW).
The generator state is keep externally in the state argument, a vector of four UINT_LEAST32_T values, most conveniently initialized with incw_r(). This makes the functions thread safe, and allows creation of a practically-unlimited number of independent families of generators, each with its own state.
The generator is Marsaglia's KISS generator, which has a long period of about 2**123 (approximately 10**37), and has passed several difficult tests of randomness, including Marsaglia's Diehard Battery test suite, and the Marsaglia/Tsang tuftest suite.
The double functions sample the 32-bit integer generator twice, the long double functions sample it four times, and the long long double functions sample it eight times,
When precision permits, the decimal floating-point functions use the corresponding binary generator, and then convert that result to decimal. Otherwise, they convert several samples of the integer generator to decimal floating-point with suitable scaling.