MathRand()

 
с завидным постоянством возвращает 41 =)))

_________________
расскажите, плз, как должен работать "Генератор псевдослучайных чисел" (pseudo random number) ?
 
У меня все нормально, тип только не понятно какой выдает - целые 2-байтные положительные, но псевдослучайные. Билд, правда 151, не обновлял еще.
 
int вроде по определению MQL4 4-байтный, да еще и с отрицательными значениями. Да, не понятно как работает. В справке нет описания.
 
Вам нужно сначала установить начальное значение этому самому генератору. для этого есть функция MathSrand
MathSrand(LocalTime());
 
Спасибо. А это достаточно сделать один раз, или, если в разных часях эксперта вызывается, надо каждый раз устанавливать?
 
достаточно 1 раз при инициализации
 
попробовал.....
получается, что "случайным" число становится только за счёт изменения точки отсчёта ( в вашем примере - LocalTime() ). Когда вставляешь
MathSrand(123);


MathRand() постоянно возвращает одно и то же число...


С таким же успехом можно пользоваться просто локалтайм-ом........

 
komposter,
это стандартное поведение, так же как в С.
вы никогда не задумывались что людям нужны предопределенные случайные последовательности?
 
всё правильно. это и называется "псевдослучайным числом". реализация генератора действительно случайных чисел очень дорога. и по времени, и по деньгам.
локал-таймом в чистом виде пользоваться нельзя, потому, что его значение возрастает по известному закону. но в качестве стартовой точки его очень часто и используют.
 
попробовал.....
получается, что "случайным" число становится только за счёт изменения точки отсчёта ( в вашем примере - LocalTime() ). Когда вставляешь
MathSrand(123);


MathRand() постоянно возвращает одно и то же число...


С таким же успехом можно пользоваться просто локалтайм-ом........



Для генерации обычно используют две функции rand() и srand().
Вот их описания (из MSDN от Visual C++):
The rand function returns a pseudorandom integer in the range 0 to RAND_MAX. 
Use the srand function to seed the pseudorandom-number generator before calling rand.



The srand function sets the starting point for generating a series of pseudorandom
integers. To reinitialize the generator, use 1 as the seed argument. Any other value for
seed sets the generator to a random starting point. rand retrieves the pseudorandom 
numbers that are generated. Calling rand before any call to srand generates the same 
sequence as calling srand with seed passed as 1.



И пример:

/* RAND.C: This program seeds the random-number generator
 * with the time, then displays 10 random integers. */

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

void main( void )
{
   int i;

   /* Seed the random-number generator with current time so that
    * the numbers will be different every time we run.
    */
   srand( (unsigned)time( NULL ) );

   /* Display 10 numbers. */
   for( i = 0;   i < 10;i++ )
      printf( "  %6d\n", rand() );
}


Output

    6929
    8026
   21987
   30734
   20587
    6699
   22034
   25051
    7988
   10104
 
Slawa, Renat, Arthur, огромное спасибо!
У меня и проблемы как таковой не было, просто мысли вслух высказал...
Причина обращения: