Генерация равномерно распределенных случайных чисел (0,1)

 

Генерация равномерно распределенных случайных чисел (0,1) средствами MQL без внешних *.dll?

 
int MathRand()
Функция возвращает псевдослучайное целое число в дипазоне от 0 до 32767. Перед первым вызовом функции необходимо использовать функцию MathSrand, чтобы перевести генератор псевдослучайных чисел в начальное состояние.
Пример:
  MathSrand(TimeLocal());
// Отображает 10 чисел.
for(int i=0;i<10;i++ )
Print("произвольная величина ", MathRand());
 
sergeev >>:
int MathRand()
Функция возвращает псевдослучайное целое число в дипазоне от 0 до 32767. Перед первым вызовом функции необходимо использовать функцию MathSrand, чтобы перевести генератор псевдослучайных чисел в начальное состояние.
Пример:


Это я знаю!

Я спрашиваю про диапазон (0,1).

 

Товарисч спрашивает 0 и 1 равномерно распределённые, так раскидайте их на чёт и нечет.

MathSrand(TimeLocal());
  // Отображает 10 чисел.
  for(int i=0;i<10;i++ )
     Print("произвольная величина ", MathMod(MathRand(),2));

гдето так.

 
Urain писал(а) >>

Товарисч спрашивает 0 и 1 равномерно распределённые, так раскидайте их на чёт и нечет.

гдето так.

Или имеются ввиду вещественные числа в заданном диапазоне. Тогда так:

MathRand() / 32767.0
 

Сори не понял сразу,если вам нужен диапазон то

MathSrand(TimeLocal());
  // Отображает 10 чисел.
  for(int i=0;i<10;i++ )
     Print("произвольная величина ", MathRand()/32768);

гдето так.

 
lea >>:

Или имеются ввиду вещественные числа в заданном диапазоне. Тогда так:


Вот, вот.

MathSrand(TimeLocal());
  // Отображает 10 чисел.
  for(int i=0;i<10;i++ )
     Print("произвольная величина ", MathRand()/32768);
Слабовато. помощнее?
 
gumgum >>:

Вот, вот.

Слабовато. помощнее?
MathSrand(TimeLocal());
...............
...............
...............
//---------------------------Непрерывный Генератор СЧ---------------------
double CRG(double min,double max) { return(min+((max-min)*MathRand()/32767.0));}
//=======================================================================

где:

min - начало диапазона

max - конец диапазона.


В Вашем случае будет:

void Start()
{
MathSrand(TimeLocal());
...............
...............
...............
double p=CRG(0.0,1.0);
}

//---------------------------Непрерывный Генератор СЧ---------------------
double CRG(double min,double max) { return(min+((max-min)*MathRand()/32767.0));}
//=======================================================================
 

если так,

double ran= MathRand()/32768.;
то между n/32768. и n+1/32768. при n e Z & n e [0,32767] пусто. Это не хорошо.

 

 
joo >>:

где:

min - начало диапазона

max - конец диапазона.


В Вашем случае будет:


==
MathRand()/32768.
:(
 
gumgum писал(а) >>

если так,

то между n/32768. и n+1/32768. при n e Z & n e [0,32767] пусто. Это не хорошо.

А вам, уважаемый, известно, что между любыми, сколь угодно близкими друг к другу, вещественными числами имеется бесчисленное множество вещественных чисел ?

А известно, что интервал (0,1) по мощности эквивалентен бесконечной прямой ?

Если нет - задумайтесь об этом.

Если да - правильно формулируйте свой вопрос.

Заодно попытайтесь сказать, с какой плотностью (штук на ед. длины) вы хотите иметь генерацию СЧ ?

А может вы хотите, чтобы ваш ГСЧ генерил все числа отрезка (0,1) ?

Причина обращения: