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

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 に答える