求教Random随机算法用C语言如何实现

LessonNo1 2009-11-24 02:51:20
小弟进行Linux模块编程时需要实现一个可设置丢包率功能,需用到随机丢包功能,查阅资料打算用random随机算法,但不了解原理,也不知如何设计实现。
请教有相关经验的前辈指教。(使用C语言实现)
...全文
1667 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
lizhenqi19890218 2010-06-29
  • 打赏
  • 举报
回复
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
#define RAND_MAX 10.0
main()
{
int i,j;
srand((int)time(0));
for(i=0;i<10;i++)
{
j=1+(int)(10.0*rand()/(RAND_MAX+1.0));
printf("%d ",j);
}
}
楼上的写错了,这个才是对的
LessonNo1 2009-12-02
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 forster 的回复:]
需要一个种子
一个迭代公式
伪随机
[/Quote]
我是想要知道如何使用get_random_bytes()
forster 2009-12-02
  • 打赏
  • 举报
回复
需要一个种子
一个迭代公式
伪随机
LessonNo1 2009-12-02
  • 打赏
  • 举报
回复
遇到新问题了:
在2.4.20内核的Red Hat 9上编写模块,需要生成随机数,发现在2.4内核上没有random函数可用,欲使用get_random_bytes(void *buf, int nbytes),但不知如何使用,各位前辈有实例么?
ps,如果想生成0~100范围内的随机数,应如何使用呢?概率能保证相等么?
LessonNo1 2009-11-27
  • 打赏
  • 举报
回复
看了include/linux/random.h还是不知道怎么用...
在模块编程中应该怎样用啊?有实例么?
do_fork 2009-11-27
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 lessonno1 的回复:]
引用 22 楼 do_fork 的回复:
引用 21 楼 lessonno1 的回复:
我已经发现了...
那我现在想在自己写的内核模块中使用这种随机数,还有什么办法么?


内核中已经有现成的了,为什么不用呢?

是哪个啊?怎么用的?还望大侠指教~
[/Quote]

见内核源码 include/linux/random.h 文件

drivers/net/hamradio/dmascc.c中,有人还自己写了一个
static inline unsigned char random(void)
{
/* See "Numerical Recipes in C", second edition, p. 284 */
rand = rand * 1664525L + 1013904223L;
return (unsigned char) (rand >> 24);
}
LessonNo1 2009-11-27
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 do_fork 的回复:]
引用 21 楼 lessonno1 的回复:
我已经发现了...
那我现在想在自己写的内核模块中使用这种随机数,还有什么办法么?


内核中已经有现成的了,为什么不用呢?
[/Quote]
是哪个啊?怎么用的?还望大侠指教~
do_fork 2009-11-27
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 lessonno1 的回复:]
我已经发现了...
那我现在想在自己写的内核模块中使用这种随机数,还有什么办法么?
[/Quote]

内核中已经有现成的了,为什么不用呢?
LessonNo1 2009-11-27
  • 打赏
  • 举报
回复
我已经发现了...
那我现在想在自己写的内核模块中使用这种随机数,还有什么办法么?
do_fork 2009-11-27
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 lessonno1 的回复:]
这个mark是不是指关注我的帖子的意思?方便以后查找?
刚发现如果rand是系统调用函数的话,可以使用头文件/linux/unst...(名字就不清了)就可以使用系统调用函数。
下面研究它是不是系统调用函数,估计十有八九不是...
[/Quote]

不用研究了,它不是系统调用
LessonNo1 2009-11-27
  • 打赏
  • 举报
回复
这个mark是不是指关注我的帖子的意思?方便以后查找?
刚发现如果rand是系统调用函数的话,可以使用头文件/linux/unst...(名字就不清了)就可以使用系统调用函数。
下面研究它是不是系统调用函数,估计十有八九不是...
d52787790 2009-11-27
  • 打赏
  • 举报
回复
顶起
chengzhe 2009-11-26
  • 打赏
  • 举报
回复
线性同余
jernymy 2009-11-26
  • 打赏
  • 举报
回复
mark
LessonNo1 2009-11-26
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zhao4zhong1 的回复:]
if (80>(rand()%100) {
    //80%概率发生
} else {
    //20%概率发生
}
[/Quote]
我也是这么认为的~多谢兄弟啊!下面我就来想如何测试丢包率是否能够成功实现了。
大家有关于测试方法的好主意么?
赵4老师 2009-11-26
  • 打赏
  • 举报
回复
if (80>(rand()%100) {
//80%概率发生
} else {
//20%概率发生
}
LessonNo1 2009-11-26
  • 打赏
  • 举报
回复
昨晚梦到一个思路,不知可行与否,是先产生1~100之间的随机数,然后减去我要设置的概率的百分比,例如,我要设置80%的丢包率,然后就用产生的随机数减去80,若结果大于0,则不丢此包,若结果小于0,则丢掉此包。

刚看了上面各位的留言~其中fdget的留言中有一句“0~RAND_MAX每个数字被选中的机率是相同的。”,如果是这样,那我用上面的方法产生的0~100的随机数是否也是概率相等呢?如果是的话,那我想就可以用我梦中的思路了...
do_fork 2009-11-26
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 lessonno1 的回复:]
现在又遇到新的问题,由于我编写的内核模块,在编译时无法找到rand和srand使用的头文件,比如原来只要#include <stdlib> 和 #include <time.h>就行,现在要怎么解决呢?
[/Quote]

内核模块能调用的函数有限,怎么能直接在内核态调用用户态的函数呢....
可以读/dev/random文件得到伪随机数,这个是内核维护的,只管读
或者自己实现随机数算法,不过我觉得没有那个必要
LessonNo1 2009-11-26
  • 打赏
  • 举报
回复
现在又遇到新的问题,由于我编写的内核模块,在编译时无法找到rand和srand使用的头文件,比如原来只要#include <stdlib> 和 #include <time.h>就行,现在要怎么解决呢?
do_fork 2009-11-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lessonno1 的回复:]
引用 1 楼 z0203153008 的回复:
用系统时间来设置的,具体我也不清楚

不知道iptables中的random是如何实现的,有没有大侠知道?
[/Quote]

iptables是开源的,可以看看源码
加载更多回复(10)

69,380

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧