PDA

Ver la Versión Completa : Sobre Int64


Delphius
04-04-2006, 05:13:39
Buenas foristas,

Pues, tengo un pequeño problema. Debo realizar un generador de números aletorios para poder realizar los prácticos de la cátedra de Modelos y Simulación, en uno de los puntos se me pide que encuentre el período para un generador multiplicativo donde:
módulo = 10^8
semilla = 19
a = 211
Inicialmente tenía pensado que con el tipo integer iba de pelos, pero al probarlo con dicho valor, mi máquina se clavaba (como si entrara en blucles infinitos) y la ventana se ponían blanca. El algoritmo anda bien siempre que no sobrepasara los 10^6. Para poder permitir incluso números mayores, cambié por Int64, el cual segun la ayuda, permite hasta 2^63-1. Sigue funcionando bien.... pero he aquí, que inclusive así... sucede el mismo fenómeno. ¿Cómo es posible esto?...
Lo raro es que probé con generar números (con el mismo generador) de:
a = 7^5
m = 2^31-1
Como se me pide en otro de los puntos de dicho práctico y esto anda!.... bueno... al menos con la semilla que le pasé: 15 (no se especifica la semilla, es a elección)
Adjunto el código (.dpr, .dfm y .pas) por si alguien vee algo raro. La verdad es que no me explico:confused: No veo el porqué:p

NOTA: para hacer uso de la evaluación hago empleo de la función evaluateperiod() que se encuentra incorporada en el pas.
No se cuantos foristas entienden de lo que ando hablando... pero si alguien entiende un poquito de esto... no estaría de más una orientación. No pido una solución, sino si es posible que me indiquen o me orienten.

Saludos,

Lepe
04-04-2006, 10:37:13
Yo de esto ni idea, pero lo he puesto a correr con los siguientes parámetros:

Método: Multiplicativo
Semilla: 19
Serie : 211
Factor A: 211
Módulo: 10^8

Los resultados si salen y no da ningun error al pulsar en "Generar".
Al pulsar en "Evaluar" dice que el periodo converge en
X5.000.000 (pongo los puntos por legibilidad).

Los ultimos resultados son:

X205: 20346969
X206: 93210459
X207: 67406849
X208: 22845139
X209: 20324329
X210: 88433419

Generado en 1153 milisegundos


Estoy muy seguro de que no le paso los parámetros correctos, si puedes decir los valores usando la nomenclatura del programa, casi mejor ;)

Por cierto, en la línea 289 si "ms" es igual a cero, se obtiene una división por cero, es una tontería... pero no está de más decirla.

Saludos

Delphius
04-04-2006, 16:14:08
Pues, te lo aseguro.... ingresé esos valores.... lo intenté varias veces.... ¿será mi procesador el que no se la aguanta?


Al pulsar en "Evaluar" dice que el periodo converge en
X5.000.000 (pongo los puntos por legibilidad).

¡Mi teoría esta en lo cierto! :eek: Heurísticamente, (y en base a otros ejemplos), había determinado que se encontraría allí.... gracias...

La verdad es que no se que puede ser...
Lo intentaré de nuevo...


Por cierto, en la línea 289 si "ms" es igual a cero, se obtiene una división por cero, es una tontería... pero no está de más decirla.

Si, me he percatado de ello... no tuve tiempo para corregirlo:D

Delphius
04-04-2006, 16:37:19
Pues debo decir que ahora anda todo ok.... bueno... me largó el resultado.... ¿No se que c... pasó? Se congeló por unos momentos la ventana... pero en fin funcionó!

Debe ser como digiste Lepe... a lo mejor metí muy mal el dedo:D

Ahora me puedo responder a un hilo muy viejo que había iniciado... el límite del STtringList... es de nada menos que de 2^16 items. Lo pude comprobar cuando ingresé que me genere 500.000 números.

Gracias Lepe y a cualquier persona que se haya molestado en leer este hilo.
Saludos,

dec
04-04-2006, 18:49:35
Hola,


(...) el límite del STtringList... es de nada menos que de 2^16 items.


¿Pero no tiene que ver en cierto modo de la cantidad de memoria disponible? Es decir, que el límite dependerá, al menos también dependerá de la memoria disponible en el sistema, ¿o me equivoco? No sería de extrañar...