Génération de nombres aléatoires uniformément distribués (0,1)

 

Génération de nombres aléatoires uniformément distribués (0,1) par les outils MQL sans *.dll externe ?

 
int MathRand()
La fonction renvoie un nombre entier pseudo-aléatoire compris entre 0 et 32767. Avant d'appeler cette fonction pour la première fois, vous devez utiliser MathSrand pour définir le générateur de nombres pseudo-aléatoires à l'état initial.
Exemple :
  MathSrand(TimeLocal()) ;
// Affiche 10 chiffres.
for(int i=0;i<10;i++ )
Print("valeur aléatoire ", MathRand()) ;
 
sergeev >>:
int MathRand()
Функция возвращает псевдослучайное целое число в дипазоне от 0 до 32767. Перед первым вызовом функции необходимо использовать функцию MathSrand, чтобы перевести генератор псевдослучайных чисел в начальное состояние.
Пример:


Je le sais !

Je m'interroge sur l'intervalle (0,1).

 

Le camarade demande que les 0 et les 1 soient répartis de manière égale, alors divisez-les en pairs et impairs.

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

comme ça.

 
Urain писал(а) >>

Le camarade demande que les 0 et les 1 soient répartis de manière égale, alors divisez-les en pairs et impairs.

Comme ça.

Ou bien voulez-vous dire des nombres réels dans un intervalle donné. Alors comme ça :

MathRand() / 32767.0
 

Je suis désolé, si vous cherchez une gamme.

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

quelque chose comme ça.

 
lea >>:

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


Là, là.

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

Вот, вот.

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

où :

min - début de la gamme

max - fin de la plage.


Dans votre cas, ce sera :

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

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

si c'est le cas,

double ran= MathRand()/32768.;
alors entre n/32768. et n+1/32768. à n e Z & n e [0.32767] est vide. Ce n'est pas bon.


 
joo >>:

где:

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

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


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


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

si c'est le cas,

alors entre n/32768. et n+1/32768. avec n e Z & n e [0.32767] est vide. Ce n'est pas bon.

Savez-vous, cher ami, qu'il existe un nombre infini de nombres réels entre tous les nombres réels, aussi proches soient-ils les uns des autres ?

Et savez-vous que l'intervalle (0,1) est équivalent à une ligne infinie en puissance ?

Si non, réfléchissez-y.

Si oui, formulez votre question correctement.

En même temps, essayez de dire à quelle densité (pièces par unité de longueur) vous voulez avoir une génération MF ?

Ou peut-être voulez-vous que votre GSF génère tous les numéros un segment de (0,1) ?