drand48 (产生一个正的浮点型随机数)
erand48 (产生一个正的浮点型随机数)
initstate (建立随机数状态数组)
jrand48 (产生一个长整型数随机数)
lcong48 (设置48位运算的随机数种子)
lrand48 (产生一个正的长整型随机数)
mrand48 (产生一个长整型随机数)
nrand48 (产生一个正的长整型随机数)
rand (产生随机数)
random (产生随机数)
seed48 (设置48位运算的随机数种子)
setstate (建立随机数状态数组)
srand (设置随机数种子)
srand48 (设置48位运算的随机数种子)
srandom (设置随机数种子)
MS_RTOS系统中随机数测试代码
#include <ms_rtos.h>
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <math.h>
#include "../libc_tests.h"
/*
* Global data area
*/
static int mix_count = 0; /* 确保所有语句被执行 */
/*
* test_librand
*/
int test_librand(void)
{
int ran, ran0, ran1, ran2;
long rano, rano0, rano1, rano2, ranl, rann;
unsigned int ranr;
unsigned short p[7] = {
1, 2, 3, 4, 5, 6, 7};
unsigned short xseed[3] = {
1, 2, 3};
double rand0, rand1, rane;
/*
* 每次执行程序rand产生的随机数都一样
* rand_r是rand的可重入版本,每次执行程序产生的随机数并不一样
*/
ran = rand();
VAR_USED(rano2);
VAR_USED(rann);
srand(0);
ran0 = rand();
if ((ran == ran0) || (ran0 < 0)) {
err_count++;
TS_PRT(fp, __func__, "normall call rand seed == 0");
}
srand(1);
ran1 = rand();
if ((ran1 != ran) || (ran1 < 0)) {
err_count++;
TS_PRT(fp, __func__, "normall call rand seed == 1");
}
srand(2);
ran2 = rand();
if ((ran2 == ran) || (ran2 < 0)) {
err_count++;
TS_PRT(fp, __func__, "normall call rand seed == 2");
}
mix_count++;
ran2= rand_r(&ranr);
if (ran2 < 0) {
err_count++;
TS_PRT(fp, __func__, "normall call rand_r ");
} else {
mix_count++;
}
/*
* random 返回 long 型随机数
*/
rano = random();
srandom(0);
rano0 = random();
if ((rano == rano0) || (rano0 < 0)) {
err_count++;
TS_PRT(fp, __func__, "normall call random seed == 0");
}
srandom(1);
rano1 = random();
if ((rano1 == rano) || (rano1 < 0)) {
err_count++;
TS_PRT(fp, __func__, "normall call random seed == 1");
}
srandom(2);
rano2 = random();
if ((rano2 == rano0) || (rano2 < 0)) {
err_count++;
TS_PRT(fp, __func__, "normall call random seed == 2");
}
mix_count++;
/*
* 各函数之间的区别主要体现在 使用的种子(初值)、产生的随机数范围及类型
*/
// lcong48(NULL);
lcong48(p);
mix_count++;
rand0 = drand48();
if ((rand0 < 0.0) || (rand0 >= 1.0)) {
err_count++;
TS_PRT(fp, __func__, "normall call drand48");
}
lcong48(0);
rand1 = drand48();
if ((rand1 < 0.0) || (rand1 >= 1.0)) {
err_count++;
TS_PRT(fp, __func__, "normall call drand48");
}
if ((rand0 == rand1)) {
err_count++;
TS_PRT(fp, __func__, "normall call lcong48");
}
ranl = lrand48();
if (ranl < 0) {
err_count++;
TS_PRT(fp, __func__, "normall call lrand48");
}
//[-2^31, 2^31),即-2147483648~2147483647
rano = mrand48();
if ((rano > 2147483647) || (rano < -2147483648)) {
err_count++;
TS_PRT(fp, __func__, "normall call mrand48");
}
ms_printf("mrand num is %ld\n", rano);
// mrand48();
mix_count++;
srand48(0);
rand0 = drand48();
if ((rand0 < 0.0) || (rand0 >= 1.0)) {
err_count++;
TS_PRT(fp, __func__, "normall call drand48");
}
srand48(3);
rand1 = drand48();
if ((rand1 < 0.0) || (rand1 >= 1.0)) {
err_count++;
TS_PRT(fp, __func__, "normall call drand48");
}
if ((rand0 == rand1)) {
err_count++;
TS_PRT(fp, __func__, "normall call srand48");
}
mix_count++;
// seed48(NULL);
seed48(xseed);
rand0 = drand48();
if ((rand0 < 0.0) || (rand0 >= 1.0)) {
err_count++;
TS_PRT(fp, __func__, "normall call drand48");
}
seed48(0);
rand1 = drand48();
if ((rand1 < 0.0) || (rand1 >= 1.0)) {
err_count++;
TS_PRT(fp, __func__, "normall call drand48");
}
if ((rand0 == rand1)) {
err_count++;
TS_PRT(fp, __func__, "normall call seed48");
}
mix_count++;
// erand48(NULL);
rane = erand48(xseed);
if ((rane < 0.0) || (rane >= 1.0)) {
err_count++;
TS_PRT(fp, __func__, "normall call erand48");
}
mix_count++;
// nrand48(NULL);
rann = nrand48(xseed);
if (rann < 0) {
err_count++;
TS_PRT(fp, __func__, "normall call nrand48");
}
mix_count++;
// jrand48(NULL);
//[-2^31, 2^31),即-2147483648~2147483647
rano = jrand48(xseed);
if ((rano > 2147483647) || (rano < -2147483648)) {
err_count++;
TS_PRT(fp, __func__, "normall call jrand48");
}
ms_printf("jrand48 num is %ld\n", rano);
mix_count++;
return 0;
}