En este archivo (relacionados con la generación de números aleatorios), es la siguiente línea:
private const int MSEED = 161803398;
que se asemeja a la proporción áurea.
¿Cómo cociente de oro juega un papel importante en la generación de números aleatorios? Me puede ayudar a entender esto desde el punto de vista matemático?
NOTA: Naturalmente, me atrevo a predecir que habrá muchas personas diciendo: Esta es la programación de que se trate. Sin embargo, estoy pidiendo respuesta/aclaración/visión de la matemática punto de vista. Espero que puedan hacer de esta sutil distinción.
Actualización
Después de algunas investigaciones, encontré que el origen más probable del código he ligado en la parte superior es el siguiente comentario y código: (del libro NUMÉRICA RECETAS, pg. 198):
Por último, le damos Knuth sugerencia para un portátil de rutina, que hemos traducido para el presente convenciones como RAN3. Esto no es basado en el lineal congruential método en absoluto, sino más bien en una método sustractivo. Uno podría esperar que sus debilidades, si, son de por lo tanto, de muy diferente carácter de las deficiencias, si las hubiere, de RAN1 por encima de [no]. Si alguna vez sospecha de problemas con uno la rutina, es una buena idea probar las otras en la misma aplicación. RAN3 tiene una característica interesante: si su máquina es pobre en entero aritmética (es decir, se limita a números enteros de 16 bits), la sustitución de la dos ", comentó" líneas para el siguiente les va a representar la rutina totalmente de punto flotante.
FUNCTION RAN3(IDUM)
Returns a uniform random deviate between 0.0 and 1.0. Set IDUM to any negative value
to initialize or reinitialize the sequence.
C IMPLICIT REAL*4(M)
C PARAMETER (MBIG=4000000.,MSEED=1618033.,MZ=0.,FAC=2.5E-7)
PARAMETER (MBIG=1000000000,MSEED=161803398,MZ=0,FAC=1.E-9)
According to Knuth, any large MBIG, and any smaller (but still large) MSEED can be
substituted for the above values.
DIMENSION MA(55) Save MA. This value is special and should not be modified; see Knuth
DATA IFF /0/
IF(IDUM.LT.0.OR.IFF.EQ.0)THEN Initialization
IFF=1
MJ=MSEED-IABS(IDUM) Initialize MA(55) using the seed IDUM and the large number MSEED.
MJ=MOD(MJ,MBIG)
MA(55)=MJ
MK=1
DO 11 I=1,54 Now initialize the rest of the table
II=MOD(21*I,55) in a slightly random order
MA(II)=MK with numbers that are not especially random
MK=MJ-MK
IF(MK.LT.MZ)MK=MK+MBIG
MJ=MA(II)
11 CONTINUE
DO 13 K=1,4 We randomize them by "warming up the generator"
DO 12 I=1,55
MA(I)=MA(I)-MA(1+MOD(I+30,55))
IF(MA(I).LT.MZ)MA(I)=MA(I)+MBIG
12 CONTINUE
13 CONTINUE
INEXT=0 Prepare indices for our first generated number
INEXTP=31 The constant 31 is special; see Knuth
IDUM=1
ENDIF
INEXT=INEXT+1 Here is where we start, except on initialization. Increment INEXT,
IF(INEXT.EQ.56)INEXT=1 wrapping around 56 to 1.
INEXTP=INEXTP+1 Ditto for INEXTP
IF(INEXTP.EQ.56)INEXTP=1
MJ=MA(INEXT)-MA(INEXTP) Now generate a new random number subtractively
IF(MJ.LT.MZ)MJ=MJ+MBIG Be sure that it is in range
MA(INEXT)=MJ and output the derived uniform deviate
RAN3=MJ*FAC
RETURN
END