下面的平方取中生成随机数有没有问题

采石工 2013-01-14 10:43:45

#include <cmath>
#include <iostream>
using namespace std;

int pow10(int n)
{
int ret=1;
for(int i=0;i<n;++i)
{
ret*=10;
}
return ret;
}

int getplaces(int a)
{
int n=1;
while(a/10)
{
++n;
a/=10;
}
return n;
}
unsigned int k;
unsigned int next=1;
void srandom(unsigned int seed)
{
next=seed;
k=getplaces(next);
}

double random()
{
double r=(double)next/pow10(k);
next=((next*next)/pow10(k/2))%pow10(k);
//next=fmod((double)(next*next)/pow10(k/2),pow10(k));
return r;
}

void test(const int n)
{
int a[10]={0};
for(int i=0;i<n;++i)
{
double r=random();
int j=floor(r*10);
a[j]++;
}
for(int i=0;i<10;++i)
{
cout<<a[i]<<endl;
}
}

int main()
{
srandom(5466);
test(5000);
return 0;
}

测试结果显示,生成的随机值并非近似于均匀分布,不知代码有问题,还是确实为非均匀分布
...全文
153 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
采石工 2013-01-14
  • 打赏
  • 举报
回复
引用 1 楼 bjtbjt 的回复:
本来就是伪随机数 sleep一下试试。
你好,我知道是随机。我仿照matlab的代码写了上述代码,前者测试结果是:随机序列近似于均匀分布。而上面代码得到的结果却明显不是。不知何故
5t4rk 2013-01-14
  • 打赏
  • 举报
回复
本来就是伪随机数 sleep一下试试。

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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