知識社群登入
位置: AutoCAD開放式教學 > 討論區 > 討論
rnd1(), rnd2(), irnd(), init_rnd() 副程式
1樓
//   rnd1(    &s1);
void rnd1(int *s1)
{
double r1= (double) (*s1);
r1= fmod(r1*16807.0 , 2147483647.0);
(*s1)= (int) (r1 + 0.5);
}// end of rnd1()
// --------------------------------------------------------

//   init_rnd(&s1);
void init_rnd(int *s1)
{
int t1, t2, i;
time1(&t1);
t2= t1;
while (t2 == t1) {
time1(&t1);
}
// get a new t1
(*s1)= t1;
for (i=0;i<300;i++) {
rnd1(s1);
}
}// init_rnd()
// --------------------------------------------------------

//   rnd2(&s1, &x);
void rnd2(int *s1, double *x)
{
rnd1(s1);
(*x)= ((double) *s1)/(2147483647.0);
}// end of rnd2()
// --------------------------------------------------------

// swap2v(&i1, &i2);// swap 兩個變數的 內涵值
template <class T>
swap2v(T *a, T *b)
{
T temp;
temp= *a;
*a= *b;
*b= temp;
}// end of swap2v()
// --------------------------------------------------------

//   irnd(&s1, i1, i2, &ii);
void irnd(int *s1, int i1, int i2, int *ii)
{
double x;
// limits i1 <= i2
if (i1 > i2) {
swap2v(&i1, &i2);
}
rnd2(s1, &x);
(*ii)= (int) (x*(i2 - i1 + 1) + i1);
}// end of irnd()
// --------------------------------------------------------