如何在C中的两个数字之间生成随机数? (核心)
How to generate random number between two numbers in C? (Kernel)
我想在 C(内核)中的两个数字之间生成随机数。在带有标准库的 C 中很容易,但在没有库的 C 中,我只是找到了这个链接:link 1, link 2 我不知道如何使用链接中的代码。
我无法显示我的代码。因为我的代码太长了(+1000行代码)。
编辑
这是我的不完整代码:
#include <lib.h>
int rand()
{
unsigned long int next = 1;
next = next * 1103515245 + 12345;
return (unsigned int)(next / 65536) % (RAND_MAX + 1);
}
int rrand(int min, int max)
{
/* incomplete */
}
lib.h:
#ifndef _LIB_H
# define _LIB_H
#endif
#ifdef _LIB_H
# ifndef _DEF_H /* this line isn't important for this question */
# include <def.h> /* this line isn't important for this question */
# endif
# define RAND_MAX 32767
extern int rand();
extern int rrand(int min, int max);
extern void *malloc(size_t size); /* this line isn't important for this question */
extern int atoi(char *str); /* this line isn't important for this question */
extern char *itoa(int value, char *str, int base); /* this line isn't important for this question */
#endif
编辑 2
我可以毫无错误地编译我的代码。
我通常做一个函数来生成一个随机数,不超过 n
unsigned randto(unsigned n) {
unsigned r, hi = (RAND_MAX / n) * n; // avoid
do r = rand(); while (r >= hi); // bias
return r % n;
}
有了这个功能(当然还有rand()
),你可以轻松写出你的rrand()
unsigned rrand(unsigned lo, unsigned hi) {
return lo + randto(hi - lo + 1);
}
我想在 C(内核)中的两个数字之间生成随机数。在带有标准库的 C 中很容易,但在没有库的 C 中,我只是找到了这个链接:link 1, link 2 我不知道如何使用链接中的代码。
我无法显示我的代码。因为我的代码太长了(+1000行代码)。
编辑
这是我的不完整代码:
#include <lib.h>
int rand()
{
unsigned long int next = 1;
next = next * 1103515245 + 12345;
return (unsigned int)(next / 65536) % (RAND_MAX + 1);
}
int rrand(int min, int max)
{
/* incomplete */
}
lib.h:
#ifndef _LIB_H
# define _LIB_H
#endif
#ifdef _LIB_H
# ifndef _DEF_H /* this line isn't important for this question */
# include <def.h> /* this line isn't important for this question */
# endif
# define RAND_MAX 32767
extern int rand();
extern int rrand(int min, int max);
extern void *malloc(size_t size); /* this line isn't important for this question */
extern int atoi(char *str); /* this line isn't important for this question */
extern char *itoa(int value, char *str, int base); /* this line isn't important for this question */
#endif
编辑 2
我可以毫无错误地编译我的代码。
我通常做一个函数来生成一个随机数,不超过 n
unsigned randto(unsigned n) {
unsigned r, hi = (RAND_MAX / n) * n; // avoid
do r = rand(); while (r >= hi); // bias
return r % n;
}
有了这个功能(当然还有rand()
),你可以轻松写出你的rrand()
unsigned rrand(unsigned lo, unsigned hi) {
return lo + randto(hi - lo + 1);
}