Mdulo aleat.h 1.3 para Inform
(C) 2000 El Presi (Enrique D. Bosch) [kifcu@confluencia.net]
Puede distribuirse libremente bajo licencia GNU LGPL


Esto es un mdulo para Inform (no necesariamente para informatE, aunque
puede usarse conjuntamente) que proporciona nmeros pseudoaleatorios
mediante el algoritmo del mtodo de congruencia lineal, con aceso a su
semilla y los parmetros crticos del algoritmo. La semilla es lo que
determina la secuencia pseudoaleatoria que se va a generar, dadas semillas
diferentes se generarn secuencias de nmeros diferentes y para una misma
semilla siempre se generar la misma secuencia de nmeros, de ahi que no
sean realmente aleatorios sino solo pseudoaleatorios; por eso es
recomendable que la semilla inicial se distinta en cada ejecucin, siempre
que no se quiera tener la misma y nica secuencia.
Si se quisieran generar nmeros realmente aleatorios se debera recurrir a
eventos externos del sistema o al uso de hardware especial, pero este mdulo
no cubre eso.

El mdulo puede compilar tanto para la mquina Z como para Glulx. La
versin 1.2 corrige un grave bug presente en la versin 1.1 y se puede
compilar tanto con Inform 6.21 (o superior) como con Inform 6.15.

La versin 1.3 corrige un bug que compilando para Glulx, bajo ciertas
condiciones se produca overflow y la funcin randosem devolva negativos
cuando no deba. Tambin cambia un parmetro (el mdulo) bajo Glulx para
mejorar la aleatoriedad.

Nota: Si se presentan otros problemas de aleatoriedad, se deben cambiar los
valores del algoritmo con la funcin pcriticos.

Ya que este mdulo se ejecuta sobre Inform, utiliza aritmtica entera, no
implementa nada de nmeros reales (coma flotante).

El mdulo se implementa como la clase "generador", asi que en el cdigo debe
declararse por lo menos una instancia (objeto) de esa clase, asi se pueden
definir distintos objetos generador con semillas y parmetros crticos
independientes.

Ejemplo de inclusin de alet.h junto con declaracin de un objeto generador:

include "aleat";
generador aleatorio;


Interfaz del mdulo (mtodos proporcionados):


aletorio.randomsem(a,z)      Devuelve un nmero pseudoaleatorio comprendido 
                             entre a y z (a>=0, a<z, z<=32766).                             

aleatorio.csemilla(x)        Cambia la semilla al valor de x.

aleatorio.msemilla()         Devuelve la semilla actual.

aleatorio.pcriticos(u,s,m)   Permite cambiar los parmetros crticos del
                             algoritmo en tiempo de ejecucin.
                             u=multiplicador, s=sumando, m=mdulo. Por
                             defecto trae unos valores aceptables pero se
                             pueden cambiar en cualquier momento.


si se quisiera utilizar otra instacia de la clase, se declara:

generador otro_aleatorio;

y los mtodos se nombrarn entonces asi:

otro_aleatorio.randomsem
otro_aleatorio.csemilla
etc.

Identificadores usados en aleat.h, para evitar colisiones con otros mdulos
o con el programa principal:

class generador (con las propiedades publicas [mtodos] comentadas antes
y las siguientes propiedades privadas):
semilla
mul
sum
mod
absmu
constant ALEAT_MODULO

Agradecimientos: principalmente a Zak que me dio la idea, a todos los de la
lista informatE y a todos los aventureros en general.
