![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#23
|
||||
|
||||
|
Hola a todos,
Sobre como funcionan esos componentes no puedo opinar puesto que nunca los usé. Si uso IBX, en D6, con Firebird 1.5 y no tengo problemas con ellos (hasta el momento). Lo que me resulta extraño es lo que comentan sobre los números aleatorios, o mejor dicho pseudo-aleatorios. El problema con Random es que se lo limita a 8 caracteres, y la verdad es que al limitarlo es muy probable que consigamos números repetidos. He aquí la explicación: Internamente Random muy probablemente sea un generador lineal multiplicativo, al menos eso quisiera esperar (en la ayuda que acompaña a D6, no da información al respecto). Y si lo és, debería estar diseñado para responder del mejor modo a secuencias únicas. Al menos en teoría, se esperaría que los valores del generador sean los adecuados para garantizar que en toda la secuencia de M-1 números no exista un número repetido. Y este M es un valor bastante grande. Si en verdad es un GLM, y desean garantizar que el número obtenido sea "único" debería tomarse todos los decimales que éste devuelve. En realidad el generador devuelve números distribuidos uniformemente en el rango [0,1). Cuando uno llama a "RandomRange()" o a Random(Range) lo que se consigue es forzar el redondeo. Y por tanto se pierde esos valores únicos: los extensos decimales que hacen a cada número único e irrepetible en la secuencia. Si buscan sobre generadores de números pseudoaleatorios llegarán a hilos en donde hablé al respecto. De cualquier forma, si se quiere seguir dandole ideas de como obtener números únicos, y cuanto más grandes sean mejor, lo ideal es emplear ya sea int64 si se manejan con enteros o Extended si operan con los reales para que se puedan obtener números que no agotaríamos tan fácilmente. Y si se desea perfeccionar, aún más, siguiendo la idea de los números aleatorios. Lo más óptimo es tener múltiples generadores concatenados. Un ejemplo es así: numero = G1() + G2() + ... + Gn() El programa Arenna hace uso de esta técnicas para generar números enormes. Saludos, |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Mensaje de error extraño | Sick boy | Firebird e Interbase | 0 | 12-12-2008 11:22:26 |
| Error Extraño | SysAdminGCS | Varios | 1 | 18-08-2007 16:30:49 |
| Error Extraño | Esau | SQL | 4 | 17-06-2005 22:44:16 |
| error extraño | gilberto_1126 | Varios | 2 | 05-09-2004 01:01:01 |
| Error Extraño | Esau | OOP | 5 | 19-11-2003 18:01:32 |
|