【问题标题】:Why does this code always generate zero when I want to generate random numbers? How can I fix the problem?当我想生成随机数时,为什么这段代码总是生成零?我该如何解决这个问题?
【发布时间】:2020-11-28 22:18:31
【问题描述】:
#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;  
}

【问题讨论】:

  • 你从不给 _seed、_a 或 _c 任何值,所以它一直使用 0 和 0*0+0 = 0。

标签: c++ class random-seed seed srand


【解决方案1】:

你的问题在这里:

return (_seed = (_a * _seed + _c) % _m);

_a 为 0,因此返回值为 0,并且永远不会改变(因为 _a 始终为 0)。

【讨论】:

    【解决方案2】:

    尝试将时间设置为“NULL”而不是零。在这种情况下,零可能意味着 1970 年 1 月 1 日的午夜。如果是这种情况,您将继续获得与该时间同时出现的随机种子。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-13
      • 1970-01-01
      • 2023-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多