Aleatoriedad en Informática

Es cierto que la aleatoriedad en informática no existe?

es decir cuando en el curro un programa a veces da un error y otras no (haciendo el mismo proceso) aunque no lo parezca y pienses que estés haciendo lo MISMO que otras veces que no te ha dado un error, ese error es por UN motivo verdad? no es que aleatoriamente haya decidido generar un problema el software... no?

me he explicado muy mal... alguien me ha entendido y sabe responderme? jaja
A tu pregunta original: es cierto.

A la pregunta que realmente quieres expresar: es aún más cierto. Nosotros, programadores, somos los que implementamos todos los errores, sabiéndolo o no. "La máquina siempre obedece, aunque la orden esté mal"

A mí, una vez me sucedió que la mayoría de las veces iba bien y otras veces el programa petaba. ¿Motivo? Un formato de fecha mal interpretado, que excepcionaba cuando el segundo de la hora era menor de 10. Casi nos volvemos locos XD
mglon escribió:Es cierto que la aleatoriedad en informática no existe?


No se puede generar un número aleatorio en un ordenador salvo con hardware especializado. Yo trabajé en una web de apuestas, y en el rack de servidores tenían un Pentium MMX conectado al rack principal únicamente para dar soporte a una tarjeta de números aleatorios que tenían instalada. Si no recuerdo mal usaban fotones atravesando un espejo semi-transparente para calcular los 0 y los 1s, pero hay otras maneras diferentes de conseguir valores aleatorios.

Era una risión cada vez que el Pentium se colgaba y alguien tenía que llamar a Malta para que fuesen al rack y lo encendiesen de nuevo XD.

Taiyou
Una cosa es que no se puedan generar numeros totalmente aleatorios (respuesta de Taiyou) y otra es lo que tu dices de los cuelgues de los programas. Ahi intervienen muchas mas cosas que la aleatoriedad. Normalmente simplemente un mal diseño que dependiendo de los eventos anteriores a veces puede generar problemas, a veces no (y en este caso nada que ver con la aleatoriedad, es lo que llamamos con todas las de la ley un bug).
En C/C++ un mal uso de los punteros puede ocasionar que el programa falle "a veces".

No esque el programa falle a veces, sino que falla en unas determinadas circunstancias concretas. El software no se inventa nada.
La aleatoriedad no existe en ningun sentido, todo es un cúmulo de sucesos, los comprendamos o no. :o
Una manera de generar un numero aleatorio es jugar con la fecha del sistema, pero claro, ya no es aleatorio, es calculado en base al momento en que se ejecute la función.
Delian escribió:Una manera de generar un numero aleatorio es jugar con la fecha del sistema, pero claro, ya no es aleatorio, es calculado en base al momento en que se ejecute la función.


Eso te daría un número semialeatorio, ya que es predecible (chungo chungo chungo de predecir, pero predecible). Por eso hay dispositivos hardware que usan ciertos efectos que son impredecible para producir números completamente aleatorios:

http://en.wikipedia.org/wiki/Hardware_random_number_generator

Taiyou
mglon escribió:Es cierto que la aleatoriedad en informática no existe?

es decir cuando en el curro un programa a veces da un error y otras no (haciendo el mismo proceso) aunque no lo parezca y pienses que estés haciendo lo MISMO que otras veces que no te ha dado un error, ese error es por UN motivo verdad? no es que aleatoriamente haya decidido generar un problema el software... no?

me he explicado muy mal... alguien me ha entendido y sabe responderme? jaja


A lo primero: efectivamente no existe. Es como decir: Honradez en política, auqnue creo recordar que por ejemplo webs como Mega hacían un seguimiento de tus movimientos de ratón que en cierta medida pueden llegar a ser aleatorios, eso sí, con factor humano de por medio.

A lo que te refieres. Para bien o para mal date cuenta que los que hacen los lenguajes de programación también son humanos y las APIs sobre las que trabajas no son perfectas. Muchas veces una combinación de tu código puede hacer que esa api que le funciona a todo cristo, a ti no te funcione. O simplemente el hecho de que hagas la misma tarea pero con diferentes datos ya puede desencadenar de que cuando antes no te cascaba, ya sí lo haga porque esa combinación de datos lleve a ello.

Generalmente ese tipo de situaciones es falta de experiencia suficiente sobre el entorno de desarrollo.
No, si un error ocurre no es aleatorio, si se repiten todas las condiciones exactas volverá a suceder.
skelzer escribió:No, si un error ocurre no es aleatorio, si se repiten todas las condiciones exactas volverá a suceder.


correcto, la culpa es del programador, de las drogas, el alcohol , los politicos y el GTAV
Referido a esto, ¿conocéis algún programa que me de una secuencia de 1s y 0s lo más aleatoria posible?.

Sin utilizar hardware específico. Si hay alguna web que genere números realmente aleatorios mejor todavía.
WiiBoy escribió:
skelzer escribió:No, si un error ocurre no es aleatorio, si se repiten todas las condiciones exactas volverá a suceder.


correcto, la culpa es del programador, de las drogas, el alcohol , los politicos y el GTAV


No olvides al "puto imbécil que desarrolló esta función de mierda".
dark_hunter escribió:Referido a esto, ¿conocéis algún programa que me de una secuencia de 1s y 0s lo más aleatoria posible?.

Sin utilizar hardware específico.


Prácticamente todos los generadores de números psudoaleatorios que se utilizan en programación generan cadenas de valores estadísticamente indistinguibles a los números aleatorios.
De hecho, ¿existe realmente la aleatoriedad en la física tradicional? Tal vez cuando tengamos ordenadores cuánticos la cosa cambie ein?
kbks escribió:
dark_hunter escribió:Referido a esto, ¿conocéis algún programa que me de una secuencia de 1s y 0s lo más aleatoria posible?.

Sin utilizar hardware específico.


Prácticamente todos los generadores de números psudoaleatorios que se utilizan en programación generan cadenas de valores estadísticamente indistinguibles a los números aleatorios.

El problema és que no tengo ni idea de programar, por eso pedía un programa ya hecho, ya que lo necesito para algo que no tiene relación alguna con la informática.
dark_hunter escribió:
kbks escribió:
dark_hunter escribió:Referido a esto, ¿conocéis algún programa que me de una secuencia de 1s y 0s lo más aleatoria posible?.

Sin utilizar hardware específico.


Prácticamente todos los generadores de números psudoaleatorios que se utilizan en programación generan cadenas de valores estadísticamente indistinguibles a los números aleatorios.

El problema és que no tengo ni idea de programar, por eso pedía un programa ya hecho, ya que lo necesito para algo que no tiene relación alguna con la informática.


Podrías usar esto, indicando que lo quieres en binario:

http://www.random.org/bytes/
Si filosofamos:
Existe la aleatoriedad? Es decir, si tiramos una moneda al aire, saldra cara o cruz dependiendo de la fuerza con la que la hayamos tirado, y luego, dependiendo de la altura, la gravedad hara su funcion y saldra cara o cruz dependiendo de factores fisicos.

Para los frikis:
que hace esto?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
[b]srand(time(NULL));[/b]
int numero;
numero = rand();
printf ("%d", numero);
}


La aleatoriedad no existe, como mucho existe la pseudoaleatoriedad. Simulamos aleatoriedad lanzando un dado, pero en realidad no es aleatorio sino que las leyes fisicas hacen que salga un numero o otro. Un programa informatico simula aleatoriedad pero en realidad te pilla la millonesima de segundo, y como es dificil que te la vuelva a pillar la misma, parece aleatorio pero no lo es.
Depende, una cosa son los sistemas deterministas caóticos (pseudoaleatoriedad) y otra los no deterministas, como los procesos cuánticos (verdadero azar).

Por no hablar que mientras no se pueda reconstruir la secuencia y no se pueda distinguir del azar es suficiente en muchos casos. Por ejemplo en el caso al que lo quería aplicar (ensayos clínicos aleatorizados) se considera suficiente aleatorización lanzar una moneda o utilizar sobres sellados y barajarlos, aunque por lo engorroso que es a veces, quería utilizar un programa.
vpc1988 escribió:Para los frikis:
que hace esto?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
[b]srand(time(NULL));[/b]
int numero;
numero = rand();
printf ("%d", numero);
}


Está configurando la semilla con la cual generará los números aleatorios. La cuestión es que está usando lo que devuelve la función time, que es de tipo time_t, que si no me equivoco, es un tipo aritmético y depende de cada entorno, y es el número de segundos transcurridos desde 1970. O en lengua vernácula, ahora mismo.

Por cierto, dark_hunter, no sé lo aleatorio que tienen que llegar a ser tus necesidades, ¿pero has pensado usar un generador congruencial lineal? Es simple, bastante fácil de implementar, y tiene una buena distribución de valores (es decir, no habrá valores entre 0 y 1 (para ser exactos, ¿el espacio mostral?) que estén más favorecidos que otros).
Mithrandir0x escribió:Por cierto, dark_hunter, no sé lo aleatorio que tienen que llegar a ser tus necesidades, ¿pero has pensado usar un generador congruencial lineal? Es simple, bastante fácil de implementar, y tiene una buena distribución de valores (es decir, no habrá valores entre 0 y 1 (para ser exactos, ¿el espacio mostral?) que estén más favorecidos que otros).

Buscando he encontrado una web que utiliza desintegraciones radiactivas para generar los números, por lo que en teoría son totalmente aleatorios.

http://www.fourmilab.ch/hotbits/
dark_hunter escribió:Buscando he encontrado una web que utiliza desintegraciones radiactivas para generar los números, por lo que en teoría son totalmente aleatorios.

http://www.fourmilab.ch/hotbits/


¿Puedo saber para qué puedes llegar a necesitar tal grado de aleatoriedad? Es curioso...

Lo único malo de este sistema es que si un día cierran el chiringuito, te quedas sin números aleatorios. Y también que parece una caja negra :S
Mithrandir0x escribió:
dark_hunter escribió:Buscando he encontrado una web que utiliza desintegraciones radiactivas para generar los números, por lo que en teoría son totalmente aleatorios.

http://www.fourmilab.ch/hotbits/


¿Puedo saber para qué puedes llegar a necesitar tal grado de aleatoriedad? Es curioso...

Lo único malo de este sistema es que si un día cierran el chiringuito, te quedas sin números aleatorios. Y también que parece una caja negra :S

Cómo necesitarlo no lo necesito, pero en los ensayos clínicos tienes que explicar como obtienes la secuencia aleatoria, por lo tanto queda mejor decir que son totalmente aleatorios a decir que son psudoaleatorios. Pero como valerme me valen ambos, porque como antes han dicho, son prácticamente indistinguibles.
mglon escribió:Es cierto que la aleatoriedad en informática no existe?

es decir cuando en el curro un programa a veces da un error y otras no (haciendo el mismo proceso) aunque no lo parezca y pienses que estés haciendo lo MISMO que otras veces que no te ha dado un error, ese error es por UN motivo verdad? no es que aleatoriamente haya decidido generar un problema el software... no?

me he explicado muy mal... alguien me ha entendido y sabe responderme? jaja


Es cierto, no existe. La culpa de cualquier error (sea controlado o no) siempre, o en el 95% de los casos, es del desarrollador. Desgraciadamente un PC no hace lo que tu quieres, si no lo que tu le ordenas.
aperitivo escribió:La culpa de cualquier error (sea controlado o no) siempre, o en el 95% de los casos, es del desarrollador. Desgraciadamente un PC no hace lo que tu quieres, si no lo que tu le ordenas.

Sí. Ya sea el que desarrolló el propio programa que falla o el que desarrolló los APIs o el framework o el Sistema Operativo o las librerías que está usando o el servidor que lo ejecuta...

Una vez, llendo en tren, oí una conversación donde decían "Los ordenadores no piensan, así que es imposible que fallen" Cuando es precisamente porque no piensan por lo que fallan. Si tu a una persona le dices en un lapsus linguístico "me he pillado el dedo con el jacón" si es avispao entenderá que se lo ha pillado con el cajón, pero si a un ordenador le dices que ejecute la función "pillarseElDedoConElJacón" y se llama en realidad "pillarseElDedoConElCajón" Fallará.

Y hay veces que el error no es nada evidente... a veces sin querer generamos código pseudoaleatorio por culpa de no poner un punto y coma o un paréntesis o por sumar en vez de restar... y a veces también hacemos bucles infinitos sin querer... hay veces que escribimos código erróneo pero que para que se ejecute se tienen que cumplir unas condiciones muy poco comunes, un día falla y luego no vuelve a fallar jamás ¿Es aleatorio? No. Lo que pasa es que la has cagado y no has atinado en averiguar dónde...
Pues yo recuerdo que hace muchos años en un programa que hice en visual basic 6 no hacia una suma correctamente.

Después de mirarlo con varios compañeros y no dar con el error, decidí hacer un programa nuevo que sumara 2 + 2, y el resultado daba 5???, fue flipante porque revisamos todo que los valores sean integer, etc...

Al final vimos que solo era cuando se compilaba en mi ordenador, reinstale el Visual y asunto arreglado pero vaya caos que se suscito.
belenjer escribió:Pues yo recuerdo que hace muchos años en un programa que hice en visual basic 6 no hacia una suma correctamente.

Después de mirarlo con varios compañeros y no dar con el error, decidí hacer un programa nuevo que sumara 2 + 2, y el resultado daba 5???, fue flipante porque revisamos todo que los valores sean integer, etc...

Al final vimos que solo era cuando se compilaba en mi ordenador, reinstale el Visual y asunto arreglado pero vaya caos que se suscito.



Eso como programando un microcontrolador hace unos años para una lámpara que cambiaba de colores, teníamos que restar un número de otro, y nos hacia cosas como 18-5=15.

Al final se arregló a base de NOP, pero no debería haber hecho falta. Lo mejor fue la de tiempo que perdimos buscando el error cuando era esa subnormalidad.
26 respuestas