Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我试图生成随机数,但每次都出现错误‘;ranf’;未在此范围中声明_C++_Random_Numbers_Generator - Fatal编程技术网

C++ 我试图生成随机数,但每次都出现错误‘;ranf’;未在此范围中声明

C++ 我试图生成随机数,但每次都出现错误‘;ranf’;未在此范围中声明,c++,random,numbers,generator,C++,Random,Numbers,Generator,下面是给出错误“ranf”的代码,该错误未在此范围内声明。 代码是关于生成具有初始位置和速度的随机数。 我无法配置如何解决该问题 #include<iostream> #include<fstream> #include<vector> #include<cstdlib> #include<cmath> #include<ctime> #include<map> using namespace std; con

下面是给出错误“ranf”的代码,该错误未在此范围内声明。 代码是关于生成具有初始位置和速度的随机数。 我无法配置如何解决该问题

#include<iostream>
#include<fstream>
#include<vector>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<map>
using namespace std;

const int N= 3000, nstep= 20000000, nps= 50000, nprint =1000, noverlap= 10000;
const double R=1, eps=0.95, Lbox=150,pssize= 500;
const double infty= 1e20, null= 1e-10;

vector<double> x(N), y(N), vx(N), vy(N);
vector<double> clist[N];
double Time = 0;
map<double, pair<int,int> > cseq;

void init(double tol)
{
bool overlap;
int i, j;
x[0]= ranf(Lbox-R-tol);
y[0]= ranf(Lbox-R-tol);
vx[0]=ranf(1);
vy[0]=ranf(1);

for(i=1;i<N;i++)
 {
   if(!(1 % 100)) cout << "Init " << i << endl;
  do {
   overlap = false;
  x[i]= ranf(Lbox-R-tol);
  y[i]= ranf(Lbox-R-tol); 
  j=0;
   do {
   overlap = ((x[i]-x[j])*(x[i]-x[j])+ (y[i]-y[j])*(y[i]-y[j]) < 4*(R+tol)*(R+tol));
  }
  while((++j<i) && !overlap);
 }
 while(overlap);
 vx[i]=ranf(1);`enter code here`
vy(i)=ranf(1);
  }
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
常数int N=3000,nstep=20000000,nps=50000,nprint=1000,noverlap=10000;
常数双R=1,eps=0.95,Lbox=150,pssize=500;
常数双输入=1e20,空值=1e-10;
向量x(N),y(N),vx(N),vy(N);
向量clist[N];
双倍时间=0;
map-cseq;
无效初始(双tol)
{
布尔重叠;
int i,j;
x[0]=ranf(Lbox-R-tol);
y[0]=ranf(Lbox-R-tol);
vx[0]=ranf(1);
vy[0]=ranf(1);

对于(i=1;i你确定你得到了正确的函数吗?它实际上是
cstdlib
中定义的
rand
。请参阅以获取参考。

你确定你得到了正确的函数吗?它实际上是
cstdlib
中定义的
rand
。请参阅以获取参考。

你正在调用的
ranf
函数在中没有标准化据我所知,它是未定义的,因为它根本不存在。你需要先定义它。类似这样的东西应该可以:

double ranf(double max)
{
  return (((double)rand())/RAND_MAX)*max;
}

据我所知,您正在调用的
ranf
函数在任何方面都没有标准化,因此它没有定义,因为它根本不存在。您需要先定义它。类似这样的功能应该可以工作:

double ranf(double max)
{
  return (((double)rand())/RAND_MAX)*max;
}

函数
ranf
似乎设计用于返回(0,x)范围内的随机浮点

您可以签出并推出自己的
ranf

/**
 * ranf - return a random double in the [0,m] range.
 * @param m      maximum value to be returned
 * @return       a random double in the [0,m] range
 */
double ranf(double m) {
    return (m*rand())/(double)RAND_MAX;
}
或者也

#define ranf(m)   (((m)*rand())/(double)RAND_MAX)

请记住调用
srand
初始化随机数生成器,否则每次运行程序都会返回相同的“随机”数序列。(不过,这对调试很有用)。

函数
ranf
似乎旨在返回(0,x)范围内的随机浮点

您可以签出并推出自己的
ranf

/**
 * ranf - return a random double in the [0,m] range.
 * @param m      maximum value to be returned
 * @return       a random double in the [0,m] range
 */
double ranf(double m) {
    return (m*rand())/(double)RAND_MAX;
}
或者也

#define ranf(m)   (((m)*rand())/(double)RAND_MAX)

记住调用
srand
初始化随机数生成器,否则每次运行程序都会返回相同的“随机”数序列。(不过,这对调试很有用).

您正在寻找
rand
?AFAIR您使用的C库中没有
ranf
functino。PS:也许您想改进代码缩进-这种随机跳跃缩进样式比根本没有缩进更糟糕;-)您正在寻找
rand
?AFAIR您使用的C库中没有
ranf
functino。PS:也许您想改进代码缩进-这种随机跳跃缩进样式比根本没有缩进更糟糕;-)由于他使用参数调用它,并希望得到一个
结果,我假设topicstarter以前在其他非标准库中使用过它,而不仅仅是混淆名称。@Niels这是可能的。但是为了便于移植,您应该避免使用非标准函数。这就是为什么我在m中提供了本地实现y基于stdlib的答案:)由于他使用参数调用它,并期望得到一个
结果,我假设topicstarter以前从其他非标准库使用过它,而不仅仅是混淆名称。@Niels这可能是可能的。但为了可移植性,您应该避免使用非标准函数。这就是我提供的原因我的答案中基于stdlib的本地实现:)我想知道
(RAND\u MAX+1.0)
是否更可取。这将在半开放范围[0.0,1.0]内返回一个双精度。谢谢@Niels。它正在工作。非常感谢。我想知道
(RAND\u MAX+1.0)
是否更可取。这将在半开放范围内返回一个双精度[0.0,1.0]。谢谢@Niels。它正在工作。非常感谢。