You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

45 lines
892 B

// testrandom_I().
// General includes.
#include "cl_sysdep.h"
// Specification.
#include "cln/integer.h"
// Implementation.
#include "cl_random_impl.h"
#include "cl_I.h"
#include "cl_DS.h"
namespace cln {
const cl_I testrandom_I (random_state& randomstate)
{
var uint32 ran = random32(randomstate);
var bool negative = (ran & 1);
var bool algo = ((ran>>1) & 1);
ran = ran >> 2;
ran = ran & ((1<<8)-1);
var uintC len =
(ran == 0 ? 0 :
ran <= 80 ? 1 :
ran <= 128 ? 2 :
ran <= 158 ? 3 :
ran <= 172 ? 4 :
ran <= 200 ? (ran-153)/4 : // 5..11
ran-189 // 12..66
);
CL_ALLOCA_STACK;
var uintD* MSDptr;
num_stack_alloc_1(len,MSDptr=,);
if (algo)
{ testrandom_UDS(randomstate,MSDptr,len); }
else
{ random_UDS(randomstate,MSDptr,len); }
var cl_I x = UDS_to_I(MSDptr,len);
return (negative ? -x : x);
}
} // namespace cln