cc [ flags ] -I/usr/local/include file(s) -L/usr/local/lib -lmcw [ ... ] #include <mathcw.h> extern float lrcwf_r (randcw_state_t state, float a, float b); extern double lrcw_r (randcw_state_t state, double a, double b); extern long double lrcwl_r (randcw_state_t state, long double a, long double b); extern __float80 lrcww_r (randcw_state_t state, __float80 a, __float80 b); extern __float128 lrcwq_r (randcw_state_t state, __float128 a, __float128 b); extern long_long_double lrcwll_r (randcw_state_t state, long_long_double a, long_long_double b); extern decimal_float lrcwdf_r (randcw_state_t state, decimal_float a, decimal_float b); extern decimal_double lrcwd_r (randcw_state_t state, decimal_double a, decimal_double b); extern decimal_long_double lrcwdl_r (randcw_state_t state, decimal_long_double a, decimal_long_double b); extern decimal_long_long_double lrcwdll_r (randcw_state_t state, decimal_long_long_double a, decimal_long_long_double b);
NB: Functions with prototypes containing underscores in type names may be available only with certain extended compilers.
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.
Execution is fastest when the arguments remain fixed over a series of calls, since recomputation of their logarithms can then be avoided.
Because floating-point numbers are logarithmically distributed, the best way to produce random test values for function arguments in a given range is to use a function like lrcw(), rather than scaling the results from a generator like urcw() for a uniform distribution.