Ejemplo n.º 1
0
Archivo: bit.cpp Proyecto: 0xCAB/ulib
int main()
{
	uint64_t u, v, w;
	uint64_t seed = time(0);

	RAND_NR_INIT(u, v, w, seed);

	for (int i = 0; i < 100; i++)
		printf("rand number = %llx\n", (unsigned long long)RAND_NR_NEXT(u, v, w));

	uint64_t r = RAND_NR_NEXT(u, v, w);
	uint64_t s = BIN_TO_GRAYCODE(r);
	uint64_t t = BIN_TO_GRAYCODE(r + 1);
	assert(hweight64(t ^ s) == 1);
	GRAYCODE_TO_BIN64(s);

	assert(rev8(5) == 160);
	assert(rev8_hakmem(5) == 160);

	uint64_t hi, lo;
	MULQ(0x1234567887654321ul, 0x77665544332211fful, lo, hi);
	assert(hi == 611815671993850618UL);
	assert(lo == 14353276178066116319UL);

	if (s != r)
		fprintf(stderr, "expected %016llx, acutal %016llx\n",
			(unsigned long long)r,
			(unsigned long long)s);
	else
		printf("passed\n");

	return 0;
}
Ejemplo n.º 2
0
Archivo: rand.cpp Proyecto: 0xCAB/ulib
int main()
{
	uint64_t u, v, w;
	uint64_t seed = time(0);

	RAND_NR_INIT(u, v, w, seed);

	for (int i = 0; i < 100; i++)
		printf("rand number = %llx\n", (unsigned long long)RAND_NR_NEXT(u, v, w));

	uint64_t h = 0;

	printf("rand int mix1 = %llx\n", (unsigned long long)RAND_INT_MIX64(h));
	printf("rand int mix2 = %llx\n", (unsigned long long)RAND_INT2_MIX64(h));
	printf("rand int mix3 = %llx\n", (unsigned long long)RAND_INT3_MIX64(h));
	printf("rand int mix4 = %llx\n", (unsigned long long)RAND_INT4_MIX64(h));

	uint64_t r = RAND_NR_NEXT(u, v, w);
	uint64_t s = r;
	RAND_INT4_MIX64(s);
	RAND_INT4_MIX64_INV(s);

	if (s != r)
		fprintf(stderr, "expected %016llx, acutal %016llx\n",
			(unsigned long long)r,
			(unsigned long long)s);
	else
		printf("passed\n");

	return 0;
}
Ejemplo n.º 3
0
void hweight64_test()
{
	for (int i = 0; i < 100000; ++i) {
		uint64_t r = RAND_NR_NEXT(u, v, w);
		assert(__builtin_popcountll(r) == hweight64(r));
	}
}
Ejemplo n.º 4
0
void hweight32_hakmem_test()
{
	for (int i = 0; i < 100000; ++i) {
		uint32_t r = RAND_NR_NEXT(u, v, w);
		assert(__builtin_popcountl(r) == hweight32_hakmem(r));
	}
}
Ejemplo n.º 5
0
int zipf_rng_next(struct zipf_rng *rng)
{
	double m = RAND_NR_DOUBLE(RAND_NR_NEXT(rng->u, rng->v, rng->w));

	if (isequalf(rng->s, 1.0))
		return (int)exp(m * rng->sum);

	return (int)pow(m * rng->sum * (1.0 - rng->s) + 1.0, 1.0/(1.0 - rng->s));
}
Ejemplo n.º 6
0
void hweight15_test()
{
	for (int i = 0; i < 100000; ++i) {
		uint16_t r = RAND_NR_NEXT(u, v, w) & 0x7fff;
		if (r == 0x7fffu)
			--r;
		assert(__builtin_popcount(r) == hweight15(r));
	}
}
Ejemplo n.º 7
0
static inline void
__init_seeds(uint64_t *seeds, int nseed)
{
	uint64_t x, y, z;
	uint64_t seed = lrand48();
	int i;

	RAND_NR_INIT(x, y, z, seed);
	for (i = 0; i < nseed; i++)
		seeds[i] = RAND_NR_NEXT(x, y, z);
}
Ejemplo n.º 8
0
int main()
{
	uint64_t u, v, w;

	RAND_NR_INIT(u, v, w, 0UL);

	for (int i = 0; i < 100; i++)
		printf("rand number = %llx\n", (unsigned long long)RAND_NR_NEXT(u, v, w));

	uint64_t h = 0;

	printf("rand int mix1 = %llx\n", (unsigned long long)RAND_INT_MIX64(h));
	printf("rand int mix2 = %llx\n", (unsigned long long)RAND_INT2_MIX64(h));

	printf("passed\n");

	return 0;
}