Kibor |
Отправлено: 12 Февраля, 2016 - 18:12:04
|
Эксперт
Покинул форум
Сообщений всего: 8234
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Получение настоящего рандома из текущего времени и псевдо рандома rand вперемешку.
Кому не подходит псевдо рандом rand.
Медленная, использовать только там где действительно есть необходимость..
CODE:
messagebox (mu_random(-1000, 2000));
function mu_random(int p, int p1)
{
if (p==p1) return p;
char c[20], c1[20], c2[40];
int n, n1=0, ran, q, s, rr=p1-p, ti;
string t="", rrrrr=format(gettime());
strcpy(#c[0], rrrrr);
rrrrr=format(rand(0, 999999));
strcpy(#c1[0], rrrrr);
for (n=0; n<20; n++)
{
ti=formatci(c[n]);
if (ti>47 && ti<58)
{
c2[n1]=c[n];
n1++;
}
ti=formatci(c1[n]);
if (ti>47 && ti<58)
{
c2[n1]=c1[n];
n1++;
}
}
c2[n1]=0;
q=size(format(rr));
s=size(#c2[0]);
for (n=0; n<q; n++)t=t+c2[s-n-1];
ran=formatsn (t);
while (ran>rr)ran=ran-rr;
return p+ran;
}
|
|
|
Dantes3000 |
Отправлено: 08 Августа, 2018 - 11:40:16
|
Эксперт
Покинул форум
Сообщений всего: 1489
Дата рег-ции: Июнь 2016
Репутация: 58
|
Очень медленная...Для больших чисел совсем не подходит. Как получить рандомное число в миллисекундах от 1 часа до 7 например?
(Добавление)
CODE:h=3600000;
int c=mu_random(h*2, h*2);
messagebox (c);
function mu_random(int p, int p1)
{
char c[20], c1[20], c2[40];
int n, n1=0, ran, q, s, rr=p1-p;
string t="", rrrrr=format(gettime());
strcpy(#c[0], rrrrr);
rrrrr=format(rand(0, 999999));
strcpy(#c1[0], rrrrr);
for (n=0; n<20; n++)
{
c2[n1]=c[n];
n1++;
c2[n1]=c1[n];
n1++;
}
q=size(format(rr));
s=size(#c2[0]);
for (n=0; n<q; n++)t=t+c2[s-n-1];
ran=formatsn (t);
while (ran>rr)ran=ran-rr;
return p+ran;
} |
|
|
Zireael |
Отправлено: 08 Августа, 2018 - 12:56:50
|
Эксперт
Покинул форум
Сообщений всего: 4489
Дата рег-ции: Нояб. 2017
Репутация: 586
|
Цитата: Как получить рандомное число в миллисекундах от 1 часа до 7 например?
CODE:int r=random(1, 7);
messagebox(r);
function random(int h1, int h2)
{
int s=rand(h1, h2)*3600000+
rand(0, 60)*60000+
rand(0, 60)*1000+
rand(0, 1000);
return s;
} |
|
|
Kibor |
Отправлено: 08 Августа, 2018 - 13:00:14
|
Эксперт
Покинул форум
Сообщений всего: 8234
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Dantes3000 пишет: Очень медленная...Для больших чисел совсем не подходит
А какой рандом хотите получить между
h*2 и h*2 ?
Функция просто зависла на это условие.
CODE:int h=3600000;
int c=mu_random(-h*2, h*2);
messagebox (c);
function mu_random(int p, int p1)
{
char c[20], c1[20], c2[40];
int n, n1=0, ran, q, s, rr=p1-p;
string t="", rrrrr=format(gettime());
strcpy(#c[0], rrrrr);
rrrrr=format(rand(0, 999999));
strcpy(#c1[0], rrrrr);
for (n=0; n<20; n++)
{
c2[n1]=c[n];
n1++;
c2[n1]=c1[n];
n1++;
}
q=size(format(rr));
s=size(#c2[0]);
for (n=0; n<q; n++)t=t+c2[s-n-1];
ran=formatsn (t);
while (ran>rr)ran=ran-rr;
return p+ran;
} |
|
|
Zireael |
Отправлено: 08 Августа, 2018 - 13:25:09
|
Эксперт
Покинул форум
Сообщений всего: 4489
Дата рег-ции: Нояб. 2017
Репутация: 586
|
Функция иногда возвращает отрицательное число.
CODE:int h=3600000;
loop()
{
int c=mu_random(h, h*2);
if(c<0)messagebox (c);
sleep(1); // убрать если лень ждать
}
function mu_random(int p, int p1)
{
char c[20], c1[20], c2[40];
int n, n1=0, ran, q, s, rr=p1-p;
string t="", rrrrr=format(gettime());
strcpy(#c[0], rrrrr);
rrrrr=format(rand(0, 999999));
strcpy(#c1[0], rrrrr);
for (n=0; n<20; n++)
{
c2[n1]=c[n];
n1++;
c2[n1]=c1[n];
n1++;
}
q=size(format(rr));
s=size(#c2[0]);
for (n=0; n<q; n++)t=t+c2[s-n-1];
ran=formatsn (t);
while (ran>rr)ran=ran-rr;
return p+ran;
} |
|
|
|