4 回答
TA贡献1806条经验 获得超5个赞
你的程序那么短,返回0是正常的
我在自己的电脑上试了试,在调用clock()前用了Sleep(1000),结果就不一样了
Sleep()是 Windows API,不要在你的程序里用
而且觉得,随机数钟子只要设一次就够了,不应该每次设,
你这样,在一段时间内(大约1毫秒)都会得到同样的随机数
clock返回的大约是毫秒级(不是处理器周期,你可以查CLOCKS_PER_SEC)
TA贡献1831条经验 获得超4个赞
clock 计算的是从程序运行到执行clock时的时间间隔。
重复启动程序,时间还是 从程序运行到执行clock时的时间间隔。
这个数字不变,种子不变。你的随机就不随机了。
所以要用:
srand(time(NULL));
time(NULL) 是永远在变的。种子变,随机了。
TA贡献1820条经验 获得超9个赞
The clock() function returns an approximation of processor time used by the program.
以上内容摘自 man 3 clock
返回接近程序使用的CPU时间 你拿这个做种子?
如果linux下 建议
GRand* g_rand_new (void);
Creates a new random number generator initialized with a seed taken either from /dev/urandom (if existing) or from the current time (as a fallback).
使用这个函数 直接使用操作系统提供的/dev/urandom 这个设备是根据环境噪声产生的真(记得好像是)随机数
如果没有urandom就使用当前时间 具体这个时间精确到多少不知道
如果不用glib库
就直接去读/dev/urandom设备 这个做种子是最好了的
linux里面一般都用这个/dev/random 和/dev/urandom得到真随机数 这个这个设备的种子是 通过中断事件得到的 网卡 键盘 等设备的中断是异步 产生的随机数应该可以算作真随机数了
不过这个只适应linux而且 程序环境必须是在有交换性 也就是外界必须提供中断事件 而且如果熵池里面的随机数用完了 读取这个设备会造成程序阻塞 直到熵池里有新的随机数
如果你的程序适应这种条件
可以使用glib 有交换环境 linux (一般不是特殊环境下都满足)
建议直接使用这个方便的函数了
glib就是为了方便程序员 跨平台跑程序的 在window下可以用
clock()函数没什么好说的我直接把man里面note节翻译给你看下
Note that the time can wrap around. On a 32-bit system where CLOCKS_PER_SEC equals 1000000 this function will return the same value approximately every 72 minutes.
每72分钟会产生相同的值 (所以肯定是伪随机数,不过可以达到一般程序要求了)
On several other implementations, the value returned by clock() also includes the times of any children whose status has been collected via wait(2) (or another wait-type call). Linux does not include the times of waited-for children in the value returned by clock(). The times(2) function, which explicitly returns (separate) information about the caller and its children, may be preferable.
The C standard allows for arbitrary values at the start of the program; subtract the value returned from a call to clock() at the start of the program to get maximum portability.
C标准允许在程序开始设置一个任意值减去"clock()"的返回值 作为结果
以方便移植
The value returned is the CPU time used so far as a clock_t; to get the
number of seconds used, divide by CLOCKS_PER_SEC. If the processor
time used is not available or its value cannot be represented, the
function returns the value (clock_t) -1.
函数的返回值 使用的秒数除以CLOCKS_PER_SEC (32位系统这个数是1000000)
如果time不可用 返回(clock_t) -1
linux里面不会收集子进程的CPU使用时间
但某些其他实现收集子进程CPU使用时间
- 4 回答
- 0 关注
- 2188 浏览
添加回答
举报