2010-09-24 13 views
6

Comúnmente utilizamos la función random() para crear números aleatorios en C++.Función Inside random() - ¿Cómo se implementa?

El uso de void srand (unsigned int seed) mejoraría los resultados ya que generaría números aleatorios según el valor de la semilla.

¿Alguien puede decirme cómo se implementa realmente la función aleatoria?

+0

tengo que comentar esta int randomFunction() {return 4;}: P –

Respuesta

5

Here es una descripción detallada del algoritmo utilizado en la función aleatoria() de la biblioteca C de GNU.

Básicamente:

#include <stdio.h> 

#define MAX 1000 
#define seed 1 

main() { 
    int r[MAX]; 
    int i; 

    r[0] = seed; 
    for (i=1; i<31; i++) { 
    r[i] = (16807LL * r[i-1]) % 2147483647; 
    if (r[i] < 0) { 
     r[i] += 2147483647; 
    } 
    } 
    for (i=31; i<34; i++) { 
    r[i] = r[i-31]; 
    } 
    for (i=34; i<344; i++) { 
    r[i] = r[i-31] + r[i-3]; 
    } 
    for (i=344; i<MAX; i++) { 
    r[i] = r[i-31] + r[i-3]; 
    printf("%d\n", ((unsigned int)r[i]) >> 1); 
    } 
} 
5

El wikipedia article sobre el tema explica un algoritmo simple. Hay otros disponibles, aunque algunos están patentados.

3

Depende de su libc. La mayoría de las implementaciones (como glibc en Linux) usan un linear congruential generator, sin embargo.

Aquí se muestra un ejemplo:

return (int)((next = next * 1103515245 + 12345) % ((u_long)RAND_MAX + 1)); 

Si desea que los números aleatorios de mayor calidad, usted debe tener una mirada a mejores del algoritmo Mersenne Twister como el que debe ser implementado en Boost para los usuarios de C++.