嗨,我是这里的新手,我希望能在这里休息。 上个学期我们处理了随机数生成器我和我的朋友我们能够提出一个简单的程序(如下):
using namespace std;
int randomG() {
int GER(0);
GER=rand();
GER %= 10;
GER++;
return(GER);
}
int main() {
srand((unsigned)time(NULL));
for(int i = 0; i != 100; i++) {
cout << randomG();
}
}
现在这个学期,我们得到了这个,没有多少考虑。基本上他希望我们使用main.cpp实现随机数生成器多次调用函数FNC,以测试我们需要使用state = 1作为初始值的程序。从主程序调用FNC。 10000次通话后:状态应该等于399268537(不要在这里得到他的意思)
以下是我们的出发点:
double rand (void) {
const long a=48271 //multiplier
const long b=2147483647 //modulus
const long c=b/a //questient
const long r=b % a //remainder
static long state =1;
long t = a* (state % c) - r * (state/c);
if(t >0)
state=t;
else
state = t+b;
return ((double) state / b);
}
对于main.cpp我们完全不知道该做什么,我们不知道我们将如何调用该函数 并从程序输出中得出一个表,用于前1到10个呼叫以及9991到10000个FNG呼叫。我们无法继续前进。对于像我们这样的二年级学生来说,这完全是混乱。任何帮助都将得到推广
int main() {
srand((unsigned)time(NULL));
int // we lost on what we should put in our main
在你们的帮助下,以下是我的代码,但仍然没有编译我在这里缺少的东西?
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
double seed(long state) {
g_state = state;
}
double rand(void) {
const long a = 48271;
const long b = 2147483647;
const long c = b / a;
const long r = b % a;
long t = a* (g_state % c) - r * (g_state / c);
if (t > 0)
g_state = t;
else
g_state = t + b;
return ((double)g_state / b);
}
int main() {
std::vector<double> results;
for (int i = 1; i <= 10000; ++i) {
double number = rand();
if (i <= 10 || i >= 9991)
results.push_back(number);
}
答案 0 :(得分:1)
state
是你的种子。用1初始化它.1000次调用后,它将是399268537
。他给了你这个价值来检查你的实施。
int main()
{
for(int i = 0; i < 10000; ++i)
{
rand();
}
}
如果您在此外观后再次致电rand()
并进入该功能并检查state
的值,您会看到它是399268537。
我可以将您的代码重构为更像srand()
和rand()
:
double seed(long state)
{
g_state = state;
}
double rand(void)
{
const long a = 48271;
const long b = 2147483647;
const long c = b / a;
const long r = b % a;
long t = a* (g_state % c) - r * (g_state / c);
if(t > 0)
g_state = t;
else
g_state = t + b;
return ((double)g_state / b);
}
int main()
{
seed(1);
for(int i = 0; i < 10000; ++i)
{
rand();
}
}