为什么我要生成随机数时,这段代码总是生成零?我该如何解决这个问题?
Why does this code always generate zero when I want to generate random numbers? How can I fix the problem?
#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
using namespace std;
class mRND
{
public:
void seed()
{
srand(time(0));
_seed = rand();
}
protected:
mRND() : _seed(), _a(), _c(), _m(2147483648)
{
}
int rnd()
{
return (_seed = (_a * _seed + _c) % _m);
}
int _a, _c;
unsigned int _m, _seed;
};
int main() {
mRND r;
for(int i=0;i<100;i++)
cout<< r.rnd()<<endl;
return 0;
}
尝试将时间设置为“NULL”而不是零。在这种情况下,零可能意味着 1970 年 1 月 1 日午夜。如果是这种情况,您将继续获得与该时间发生的随机种子。
您的问题在这里:
return (_seed = (_a * _seed + _c) % _m);
_a
为 0,因此返回值为 0,并且永远不会更改(因为 _a
始终为 0)。
#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
using namespace std;
class mRND
{
public:
void seed()
{
srand(time(0));
_seed = rand();
}
protected:
mRND() : _seed(), _a(), _c(), _m(2147483648)
{
}
int rnd()
{
return (_seed = (_a * _seed + _c) % _m);
}
int _a, _c;
unsigned int _m, _seed;
};
int main() {
mRND r;
for(int i=0;i<100;i++)
cout<< r.rnd()<<endl;
return 0;
}
尝试将时间设置为“NULL”而不是零。在这种情况下,零可能意味着 1970 年 1 月 1 日午夜。如果是这种情况,您将继续获得与该时间发生的随机种子。
您的问题在这里:
return (_seed = (_a * _seed + _c) % _m);
_a
为 0,因此返回值为 0,并且永远不会更改(因为 _a
始终为 0)。