¿Los programadores de computadoras usan Pi para crear un número ‘aleatorio’?

No, no lo hacemos. Es demasiado difícil de calcular.

En su mayoría, utilizamos cosas llamadas “Registros de desplazamiento de retroalimentación lineal”, que son relativamente fáciles de entender y no requieren mucha potencia de cálculo para calcular … a menudo se usan en videojuegos donde la aleatoriedad estadística verdadera no es tan importante.

En algunas aplicaciones donde se requiere un mayor grado de aleatoriedad estadística, como la criptografía o la simulación científica, y el tiempo que le toma a la computadora calcularlas no importa tanto, hay trucos matemáticos mucho más sofisticados que se pueden usar.

Aquí hay un ejemplo de un generador de números aleatorios que se inventó en 1946: es realmente fácil de entender y lo suficientemente simple como para probarlo usted mismo en una calculadora de bolsillo.

Primero piense en cualquier número de cuatro dígitos (lo llamamos la “semilla”) … luego …

  1. Multiplique la semilla por sí misma, dándole un número de siete u ocho dígitos.
  2. Ignora los dos últimos dígitos del resultado y toma los siguientes 4 dígitos y úsalos como tu número aleatorio.
  3. Use ese mismo número como semilla para el próximo número aleatorio.

Entonces, si empiezo con 1234, multiplico 1234 x 1234 y obtengo 1522756 – los dígitos del medio son 5227. Luego vamos de nuevo: 5227 x 5227 es 27321529 – entonces mi próximo número aleatorio es 3215. 3215 x 3215 = 10336225, entonces mi próximo aleatorio El número es 3362.

Para empezar, probablemente usará más dígitos, obtendrá un resultado más grande (y más aleatorio) … por lo que puede elegir un número de 10 dígitos, obtener un resultado de 20 dígitos y elegir los 10 dígitos del medio para la próxima ronda … pero no puede hazlo en una calculadora!

Este no es un gran generador de números aleatorios: algunas opciones para la semilla inicial producen resultados realmente terribles … pero es fácil de jugar … y le muestra el tipo de cosas que los programadores de computadoras realmente usan.

No en mi experiencia, y no creo que sea algo valioso.

Si necesita números que sean deterministas pero lo suficientemente aleatorios para la mayoría de los propósitos, varios generadores pseudoaleatorios lo harán de manera rápida y eficiente. También obtienes otras ventajas; al variar la semilla para la generación aleatoria, puede elegir una secuencia pseudoaleatoria diferente (pero aún determinista); mientras que solo hay una [math] \ pi [/ math].

Si necesita números irreproducibles y verdaderamente aleatorios, por ejemplo , para el cifrado, entonces [math] \ pi [/ math] es absolutamente el lugar equivocado para buscarlos.

No, para empezar, a pesar de que pi tiene todas las combinaciones y secuencias de números, en realidad es todo lo contrario de aleatorio. Cada dígito en pi puede determinarse de una forma u otra utilizando un algoritmo y, por lo tanto, cualquier procedimiento que siga para derivar números de cualquier parte de pi puede determinarse fácilmente utilizando el mismo procedimiento que siguió para elegir inicialmente un subconjunto de números de pi . Es como…

3.142062936302582305

Bien, escribo la función random () {getSubset (ab); a = a + b;}
Mira, aunque estoy tomando números de esta matriz infinitamente diversa, todavía necesito un número aleatorio para decidir de dónde viene el subconjunto de números. Por lo tanto, si a = 3; yb = 7; Eso produciría el 20629 predecible; y luego, previsiblemente, cambie la posición de inicio en 3 a comienzo en 10, dándonos el siguiente subconjunto 30258. Ahora, todo lo que un ingeniero inverso debe hacer, como ejemplo simplificado, es proporcionar una de las muchas ecuaciones que resuelven para pi para determinar dónde está obteniendo sus números aleatorios y luego diferencia entre cada conjunto para descubrir cómo el número “aleatorio” se ajusta a permutaciones específicas.

No hay nada al azar sobre el universo. Todo es predecible. Desafortunadamente, no tenemos un medio para tomar en consideración todas las variables del universo. Si extiendo una manzana y la dejo ir, lo que probablemente sucederá. La manzana se caerá. Dos variables y una acción son fáciles de predecir. la manzana, la gravedad y el acto de dejar que la manzana sucumba a la gravedad significa que puedes predecir que la mayoría de las cosas caerán al suelo cuando la sueltes. La única otra consideración es el tiempo que lleva alcanzar el estado de reposo, incluso en el espacio exterior, esto es cierto.

Por lo tanto, mientras más variables ingresen a un sistema que tenga o no parezca tener una relación relativa o directa entre sí, algo más aleatorio es. Considere el uso del tráfico de Internet para generar números aleatorios y luego combine eso con otras fuentes de estadísticas aparentemente aleatorias.

Ciertamente podrían, pero en su lugar usan algoritmos diferentes, más rápidos y más prácticos, como el ‘Mersenne Twister’.

Quizás alguien lo haga, pero no creo que sea una buena opción. En general, el uso de números irracionales es costoso y no garantiza una buena fuente de aleatoriedad. Por otro lado, es bastante fácil y rápido calcular otras secuencias aleatorias. Las operaciones de enteros y los registros de bits son baratos y pueden funcionar a una alta velocidad. Las secuencias generadas se pueden usar como números de coma flotante con solo unas pocas operaciones.

¿Por qué lo harían ellos? No hay nada al azar sobre Pi. Pi es solo un número real computable. De hecho, la mayoría de los números reales son.

Como Buddha Buck ha señalado amablemente, pi es realmente computable. A pesar de ser un número trascendental.

Yo uso Math.random ()

Fuente: desarrollador JS

-SI

More Interesting

¿De cuántas maneras podemos dividir una cadena de 10 caracteres en más de 2 subcadenas consecutivas no vacías?

¿Qué papel juega la habilidad matemática en la ingeniería informática o la codificación?

¿Qué es un algoritmo para convertir de una lista de adyacencia a una matriz de incidencia?

¿Cuál es la vida útil de una variable?

Cómo entender el concepto matemático de la máquina de turing

¿Cuáles serían las implicaciones para el campo de la teoría de la complejidad si se encontrara un algoritmo de tiempo polinomial alto para un problema NP-difícil?

¿Cuáles son los pasos que debo seguir para dominar las matemáticas? ¿Y cuál es la forma más rápida de alcanzar este objetivo?

¿En qué se diferencia la informática de las matemáticas para resolver un problema?

¿Cómo es tomar CS 151 (teoría de la complejidad) en Caltech?

Informática teórica: ¿cómo empiezo a resolver el problema P = NP?

Cómo convertir una combinación dada a un solo número

Dadas N monedas, colocadas en una fila, indexadas 1 a N de izquierda a derecha. Inicialmente todas las monedas muestran cabeza. En cada turno, dos enteros, no necesariamente distintos, A y B entre 1 y N (inclusive) se eligen de manera uniforme al azar. Todas las monedas con un índice de A a B (inclusive) se voltean. ¿Cuál es el número esperado de monedas que muestran la cabeza después de que M gira?

¿Por qué la mayoría de la gente trata de resolver problemas profundos en la complejidad computacional como P versus NP por combinatoria y no por lógica?

¿Cómo es ser un experto en matemáticas trabajando como ingeniero de software?

¿Cómo convertiría un número binario en un número decimal en la menor complejidad de tiempo?