Generación de números aleatorios distribuidos uniformemente (0,1) - página 10

 
alsu >>:

Вы не правы, если стоит задача обеспечить генерацию последовательности СЧ заданной разрядности (заранее неизвестной), о чем и спрашивал топикстартер, то важна именно случайность - только тогда можно получать последовательности чисел с разрядностью по выбору и с "хорошими" характеристиками. Если же комбинировать значения, выдаваемые генератором ГПСЧ, то характеристики процесса не будут в общем случае "хорошими" и тот же DIEHARD он скорее всего не пройдет.

¿Has visto que no es un PRNG, es un RNG? :)

 
SProgrammer >>:

Вы видели что это не ГПСЧ, а именно ГСЧ? :)

El RNG se diferencia del PRNG en que tiene una fuente de entropía (es decir, aleatoriedad independiente del algoritmo de generación utilizado). En mi ejemplo está presente - en este caso se trata de un contador de reloj.

 
alsu >>:

ГСЧ отличается от ГПСЧ наличием источника энтропии (т.е. случайности, не зависящей от используемого алгоритма генерации). В приведенном мной примере он присутствует - в данном случае это счетчик тактов.

Sólo hablo, perdón, de lo que he enlazado. Y cómo utilizarlo. :) No es un PRNG, es un RNG. :)


Pero en general, hablar de nada - cualquier generador que no utiliza fuentes externas no es un generador de números aleatorios, pero sólo pseudo. CUALQUIERA :)

 
Muy cierto, la aleatoriedad absoluta es una abstracción matemática. Sólo hay un grado de aproximación a ella, bueno, y un grado de conciencia del objeto.
 
if(MathRand()+1>16383.5){rand+=MathPow(2,- i);

gumgum, MathPow() es una función extremadamente lenta. Hace poco publiqué un estudio. Y aquí tienes un grado entero, y es un número natural. Escribe un emulador inteligente de lo natural al grado natural.

 

1000000 números rstep=32 rsign=1 velocidad = 4.97700000

if(MathRand()+1>16383.5){rand+=MathPow(2,- i);}
1000000 números rstep=32 rsign=1 velocidad = 2.44900000
double ranD(int rsign,int rstep)
{
double div=2;
double rand=0; 
   for(int i=1; i<= rstep; i++)
   {
   //if(MathRand()+1>16383.5){rand+=MathPow(2,-i);}
   if(MathRand()+1>16383.5){rand+=1/ div;}
   div= div*2;   
   }
      if( rsign==1)
         {
         rand=2*rand-1;
         }
return(rand);
}




 
¿Puede alguien hacer una dll por ejemplo de Generación de Números Aleatorios? Gracias.
 
gumgum >>:
Может кто нибудь сделает dll например из Генерация случайных чисел? Спасибо.

y no por su cuenta?

 
alsu >>:

а самостоятельно нэ?


No sé cómo crear una dll. Estoy descargando VS ahora, lo resolveré y escribiré. Sólo que ya ha creado una dll no es tan difícil (creo que sí) si las fuentes están todas disponibles....
 
gumgum >>:


Я не умею создавать dll. Сейчас качаю VS, разберусь и напишу. Просто кто уже создавал dll это не так уж сложно(я так думаю) если исходники все имеются....

hay un artículo reciente en el quinto foro sobre este tema, todo para principiantes con fotos y ejemplos

Razón de la queja: