高性能服务器开发;C++深探

生成随机数的一段代码

生成随机数的一段代码。引来一片嘘嘘,删掉了一句,呵呵,顶不住了。可是我觉得够用就行了为原则。
改进一下,提高种子的精度,完了引入os的radom设备
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/time.h>

void init_random()
{
 unsigned int ticks;
 struct timeval tv;
 gettimeofday(&tv,NULL);
 ticks = tv.tv_sec + tv.tv_usec;
 srand(ticks);
}

//ibuflen---需要生成的随即串的长度
int genrandstr(char* pszbuf,int ibuflen)
{
    
static const char sourchar[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    init_random();
    
for(int i=0;i<ibuflen;i++)
    {
        
int x = rand()/(RAND_MAX/(sizeof(sourchar)-1));
        pszbuf[i] 
= sourchar[x];
    }
    pszbuf[ibuflen] 
= '\0';
}
int main(int argc, char* argv[])
{
 printf("begin randstr...,RAND_MAX=%d\n",RAND_MAX);
 char buf[9] = {0};
 genrandstr(buf,8);
 printf("randstr=%s\n",buf); 
 genrandstr(buf,8);
 printf("randstr=%s\n",buf);
 genrandstr(buf,8);
 printf("randstr=%s\n",buf);
 genrandstr(buf,8);
 printf("randstr=%s\n",buf);
 genrandstr(buf,8);
 printf("randstr=%s\n",buf);
 genrandstr(buf,8);
 printf("randstr=%s\n",buf);
 printf("end randstr...\n");
    return 0;
}

posted on 2010-12-23 09:15 changup 阅读(2285) 评论(8)  编辑 收藏 引用 所属分类: 随想

Feedback

# re: 生成随机数的一段代码 2010-12-23 12:17 金庆

绝对随机? 连伪随机都称不上.
需将 int x = rand()/(RAND_MAX/(sizeof(sourchar)-1));
改为 int x = int(double(rand())/RAND_MAX * (sizeof(sourchar)-1));
不然 x 取到最大值的概率明显小于其他值.  回复  更多评论   

# re: 生成随机数的一段代码 2010-12-23 14:20 liyx

你都用到rand这个伪随机了,能绝对随机。。。  回复  更多评论   

# re: 生成随机数的一段代码 2010-12-23 14:25 tr

哈哈,中国式的宣言。  回复  更多评论   

# re: 生成随机数的一段代码 2010-12-23 18:18 zdhsoft

你这个随机数,有没有做过正太分布测试?你的这个随机,有没有理论基础?数学模型呢。
人家真随机数卡,要几千美元一个呢!还且还要经过相关协会的测试!  回复  更多评论   

# re: 生成随机数的一段代码 2010-12-23 20:28 溪流

来看看敢声称绝对随机的人~  回复  更多评论   

# re: 生成随机数的一段代码 2010-12-23 23:53 酿妹汁

我擦......回复的几位你们有必要这么较真么.....多对自己较真一下如何  回复  更多评论   

# re: 生成随机数的一段代码 2011-05-08 11:37 www.52you25.com

不错的代码
还行  回复  更多评论   

# re: 生成随机数的一段代码 2011-05-08 21:49 溪流

@酿妹汁
当然要较真,因为LZ较真了。现在LZ不较真了,于是我们也可以不较真。这就是态度。  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理