0

这是在此范围内未声明错误“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);
  }
}
4

3 回答 3

2

您调用的ranf函数以我所知道的任何方式都没有标准化,因此它是未定义的,因为它根本不存在。你需要先定义它。像这样的东西应该工作:

double ranf(double max)
{
  return (((double)rand())/RAND_MAX)*max;
}
于 2013-04-16T11:20:52.027 回答
1

你确定你有正确的功能吗?它实际上rand定义在cstdlib. 请参阅此处以获取参考。

于 2013-04-16T11:20:07.330 回答
0

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

您可以查看C++ 随机浮点数生成并推出自己的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初始化随机数生成器,否则程序的每次运行将始终返回相同的“随机”数序列。(不过,这对于调试很有用)。

于 2013-04-16T13:53:56.887 回答