📄 subject_43458.htm
字号:
<p>
序号:43458 发表者:pwq 发表日期:2003-06-11 12:42:52
<br>主题:请教高手一个关于随机数产生的问题!
<br>内容:最近我用tc编写一关于比较各种页面置换算法(fifo,lru,opt,nur)效率程序时,需用到一产生随机数的函数srand()。我想通过利用每次执行时进程号不同来作为初始化随机数队列的“种子”。在linux系统下可用getpid()函数实现,但我想在windows xp下完成相同功能。请问,如何做到? 以下为部分源程序:<BR>#define true 1<BR>#define false 0<BR>#define invalid -1<BR>#define null 0<BR><BR>#define total_instruction 320 /*指令流长*/<BR>#define total_vp 32 /*虚页长*/<BR>#define clear_period 50 /*清零周期*/<BR><BR>#include "stdio.h"<BR>#include "stdlib.h"<BR>#include "time.h"<BR>typedef struct{ /*页面结构*/<BR>int pn,pfn,counter,time;<BR>}pl_type;<BR>pl_type pl[total_vp]; /*页面结构数组*/<BR>struct pfc_struct{ /*页面控制结构*/<BR> int pn,pfn;<BR> struct pfc_struct *next;<BR>};<BR>typedef struct pfc_struct pfc_type;<BR>pfc_type pfc[total_vp],*freepf_head,*busypf_head,*busypf_tail;<BR><BR>int diseffect, a[total_instruction];<BR>int page[total_instruction], offset[total_instruction];<BR>void initialize();<BR>void fifo();<BR><BR>main()<BR>{<BR> int s,i,j;<BR> srand( (unsigned)time( null ) ); /*此处须要改动,如何改?*/<BR> s=(float)319*rand()/32767+1;<BR> for(i=0;i<total_instruction;i+=4);[/b] {<BR> a[i]=s;<BR> a[i+1]=a[i]+1;<BR> a[i+2]=(float)a[i]*rand()/32767;<BR> a[i+3]=a[i+2]+1;<BR> s=(float)rand()*(318-a[i+2])/32767+a[i+2]+1;<BR> }<BR> for(i=0;i<total_instruction;i++)<BR> {<BR> page[i]=a[i]/10;<BR> offset[i]=a[i]%10;<BR> }<BR> for(i=4;i<=32;i++)<BR> {<BR> printf("%2d page frames\n",i);<BR> fifo(i);<BR> lru(i);<BR> opt(i);<BR> lfu(i);<BR> nur(i);<BR> printf("\n");<BR> }<BR>}<BR><BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:Fang 回复日期:2003-06-11 13:39:59
<br>内容:srand( (unsigned)time( null ) ); /*此处须要改动,如何改?*/<BR>用当前时间做种子,不行吗?为什么要改?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:pwq 回复日期:2003-06-11 22:24:58
<br>内容:我试过了,不能产生随机数!<BR>下面是我的源程序:(在附件里)
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:pwq 回复日期:2003-06-11 22:29:17
<br>内容:附件:
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:Fang 回复日期:2003-06-12 10:46:00
<br>内容:我也试过了,在win2000下,vc6编译:<BR>int main(int argc, char** argv)<BR>{<BR> int s,i,j;<BR> srand( (unsigned)time( NULL ) ); /*此处须要改动,如何改?*/<BR><BR> for(i=0; i< 20; i++)<BR> {<BR> s=(float)319*rand()/32767+1;<BR> printf("%d\t", s);<BR> }<BR><BR> return 0;<BR>}<BR><BR>输出:<BR><BR>52 118 281 34 49 101 319 218 60 83<BR>13 296 140 92 128 39 49 286 126 157<BR><BR>不行吗?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Fang 回复日期:2003-06-12 10:55:39
<br>内容:time()只能精确到秒,随机的效果不大理想,特别是出来的第一个数字,基本都很接近。另外,s=(float)319*rand()/32767+1;为什么要这样,不明白。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:pwq 回复日期:2003-06-12 23:30:23
<br>内容:我想用当前进程的ID作为随机数的“种子”,但却不成功~!<BR>Fang,你知道该如何做吗?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Fang 回复日期:2003-06-13 11:11:58
<br>内容:我试验了下面这句,在windows2000,vc6环境下,在tc2.0,c库中有getpid()吧?<BR>printf( "\nProcess id: %d\n", _getpid() );<BR><BR>但是,效果更加不好,每次运行基本上都重复:992,1288,992,1288....<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:pwq 回复日期:2003-06-13 12:39:57
<br>内容:tc2.0,c库中没有getpid()呀?VC++6.0里也没有!<BR>getpid()是LINUX系统下的函数!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Fang 回复日期:2003-06-13 13:03:07
<br>内容:turbo c 2.0 的c库中有没有我不知道,vc6中c运行库有_getpid(),不要这么武断,先看看再说。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:pwq 回复日期:2003-06-14 13:50:23
<br>内容:vc6中c运行库有_getpid()?<BR>我找了,在哪呀?<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -