Programación General > C/C++

 Función Random

<< < (2/2)

Ruben3d:
No hacía falta que me abrumaras con citas de diversos autores. Con exponerme un argumento bastaba.  :P

Respecto a la primera cita, la variación que propone es peligrosa por dos motivos: si no se es cuidadoso con la elección de m (siendo b impar) tendremos un generador que alternará entre números pares e impares. Es más, dependiendo de la elección de b podemos dar lugar a que ciertas semillas generen secuencias de números de periodo 1  :o. Un ejemplo de esto sería:
* Xi+1 = [16807·Xi + 1] mod (2^31-1)</li>
* [16807·1319592028 + 1] mod (2^31-1) = 1319592028</li>Así, la calidad de un generador congruente lineal está directamente ligada a la elección de las constantes utilizadas, además de la variación elegida.

De todas formas, no te puedo quitar la razón cuando dices que los valores pueden predecirse. Es fácil ver que, sabiendo las constantes que se emplean para generar una nueva semilla a partir de la anterior, se puede averiguar qué número será el próximo en generarse a partir del ya dado, como con todo sistema basado en la aplicación de reglas.

Es más, si se toma el ejemplo de generador congruente lineal que he dado (basado en la congruencia Xi+1 = aXi mod m) y se multiplica un número generado por éste por m obtendremos la semilla utilizada, por lo que ya sólo restaría inicializar el generador con esta semilla para poder obtener la misma serie de números aleatorios.

Ahora bien, cuando menciono "sistema seguro" no me refiero exactamente a la criptografía, sino más bien al grupo más general de sistemas englobados por este término. Por ejemplo, sistemas críticos con algoritmos probabilísticos pueden, perfectamente, utilizar un buen generador congruente lineal (quiero hacer destacar el calificador buen). Para los sistemas criptográficos sería una brecha de seguridad el permitir que se pudieran predecir los números utilizados en la codificación. Es por ello que se utiliza el sistema critográfico RSA (cuya explicación creo que ya sería demasiado off-topic, teniendo en cuenta el tema original del post).

Llegado a este punto creo que puedo decir que estoy de acuerdo con QliX=D! en que un generador congruente lineal no sirve para la criptografía, aunque no debe despreciarse su uso para el resto de aplicaciones.

Un saludo.

Ruben3d

dreadlock:
WAo todo lo que e aprendido hoy!!!,  :kicking:

bria:
Gracias por toda la información.

Utilizaré rand entre 0 y 100 y divideré entre el numero que sea encesario.
Para positivo negativo, rand entre 0 y 1, y elevare -1 a lo que salga.

Es algo a amno pero creo quye servirá.

Saludos.

SI alguien tiene alguna función / librería para ello,  se agradecerá.

Navegación

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa