Pregunta:
Fórmula / cálculo de la función random () / randomSeed ()
kimliv
2014-05-09 20:23:23 UTC
view on stackexchange narkive permalink

¿En qué archivo puedo encontrar el cálculo que se llama con random () ? Si no es demasiado, ¿podría publicar también el contenido en su respuesta? Estoy usando un Arduino Uno y su IDE estándar.

Encontré esto en "WMath.cpp" pero ese no es el cálculo final.

  void randomSeed (semilla int sin firmar) {if (semilla! = 0) {srandom (semilla); }} long random (long howbig) {if (howbig == 0) {return 0; } devolver aleatorio ()% cuán grande;} largo aleatorio (largo cuán pequeño, largo cuán grande) {if (cuán pequeño > = cuán grande) {devolver cuán pequeño; } long diff = howbig - howsmall; devolver aleatorio (diff) + howsmall;}  
Dos respuestas:
#1
+7
Peter Bloomfield
2014-05-09 22:23:42 UTC
view on stackexchange narkive permalink

La función random () subyacente no es parte del código Arduino. En realidad, es parte de avr-libc . El IDE de Arduino solo viene con un código objeto precompilado para él (hasta donde yo sé).

Sin embargo, es de código abierto. Puede obtener información al respecto aquí:

Si Si mira un poco hacia abajo en la página, encontrará el enlace "Código fuente y documentación".

La función random () se encuentra en libc / stdlib / random.c . Pegaría el código fuente aquí, pero técnicamente tendría que incluir un aviso de derechos de autor completo.

Son 76 líneas con copyright, así que ¿por qué no publicarlas?
@kimliv - Para ser honesto, me sentiría descortés al publicar una parte importante del código de la biblioteca de otra persona sin su permiso.
Pero con los derechos de autor está bien y supongo que el autor de la biblioteca no fue el inventor del algoritmo. (¿Cuál es el trabajo principal para mí?)
#2
+1
Gabriel Staples
2017-01-09 03:26:09 UTC
view on stackexchange narkive permalink

Lea la respuesta de Peter Bloomfield aquí: https://arduino.stackexchange.com/a/1482/7727

Luego lea lo siguiente:

Para referencia de todos, WMath.cpp de Arduino se encuentra aquí.

La documentación para la función random () de AVR-Libc está aquí.

El código fuente de AVR-Libc se encuentra aquí, como enlace desde aquí.

Descargué "avr-libc-2.0.0 .tar.bz2.sig 08-Feb-2016 "y lo extrajo. Como dijo Peter, el código fuente de "aleatorio" está en " avr-libc-2.0.0 \ libc \ stdlib \ random.c "

Para ahorrarle la molestia, aquí está el código fuente, con la declaración de licencia y copyright incluida en la parte superior.

  / * - * Copyright (c) 1990, 1993 * The Regents de la Universidad de California. Todos los derechos reservados. * * Se permite la redistribución y el uso en formato fuente y binario, con o sin * modificación, siempre que se cumplan las siguientes condiciones *: * 1. Las redistribuciones del código fuente deben conservar el aviso de copyright * anterior, esta lista de condiciones y lo siguiente Descargo de responsabilidad. * 2. Las redistribuciones en formato binario deben reproducir el aviso de copyright * anterior, esta lista de condiciones y la siguiente exención de responsabilidad en la * documentación y / u otros materiales proporcionados con la distribución. * 3. Ni el nombre de la Universidad ni los nombres de sus colaboradores * pueden usarse para respaldar o promover productos derivados de este software * sin un permiso previo específico por escrito. * * ESTE SOFTWARE ES PROPORCIONADO POR LOS REGENTES Y COLABORADORES `` TAL CUAL '' Y * SE RECHAZA CUALQUIER GARANTÍA EXPRESA O IMPLÍCITA, INCLUYENDO, PERO NO LIMITADO A, * LAS GARANTÍAS IMPLÍCITAS DE COMERCIABILIDAD E IDONEIDAD PARA UN PROPÓSITO PARTICULAR *. EN NINGÚN CASO LOS REGENTES O COLABORADORES SERÁN RESPONSABLES * DE CUALQUIER DAÑO DIRECTO, INDIRECTO, INCIDENTAL, ESPECIAL, EJEMPLAR O CONSECUENTE * (INCLUYENDO, PERO NO LIMITADO A, LA ADQUISICIÓN DE BIENES SUSTITUTOS
* O SERVICIOS; PÉRDIDA DE USO, DATOS O BENEFICIOS; O INTERRUPCIÓN COMERCIAL) * SIN EMBARGO Y POR CUALQUIER TEORÍA DE RESPONSABILIDAD, YA SEA POR CONTRATO, RESPONSABILIDAD ESTRICTA * O AGRAVIO (INCLUYENDO NEGLIGENCIA O DE OTRA MANERA) QUE SURJA DE CUALQUIER MANERA * FUERA DEL USO DE ESTE SOFTWARE, INCLUSO SI SE INDICA DE LA POSIBILIDAD * TAL DAÑO. * * Función Posix rand_r agregada en mayo de 1999 por Wes Peters <[email protected]>. * * $ Id: random.c 1944 2009-04-01 23: 12: 20Z arcanum $ * // * * From: static char sccsid [] = "@ (#) rand.c 8.1 (Berkeley) 6/14 / 93 "; * / # include <stdlib.h> # include" sectionname.h "ATTRIBUTE_CLIB_SECTIONstatic longdo_random (unsigned long * ctx) {/ * * Compute x = (7 ^ 5 * x) mod (2 ^ 31 - 1) * sin desbordamiento 31 bits: * (2 ^ 31 - 1) = 127773 * (7 ^ 5) + 2836 * De "Generadores de números aleatorios: los buenos son difíciles de encontrar", * Park y Miller, Communications of the ACM, vol. 31, no. 10, * octubre de 1988, pág. 1195. * / long hi, lo, x; x = * ctx; / * No se puede inicializar con 0, así que use otro valor. * / si (x == 0) x = 123459876L; hola = x / 127773L; lo = x% 127773L; x = 16807L * bajo - 2836L * alto; si (x < 0) x + = 0x7fffffffL; return ((* ctx = x)% ((unsigned long) RANDOM_MAX + 1));} ATTRIBUTE_CLIB_SECTIONlongrandom_r (unsigned long * ctx) {return do_random (ctx);} static unsigned long next = 1; ATTRIBUTE_CLIB_SECTIONlongrandom (void) {return do_random (void) (&next);} ATTRIBUTE_CLIB_SECTIONvoidsrandom (semilla larga sin firmar) {siguiente = semilla;}  


Esta pregunta y respuesta fue traducida automáticamente del idioma inglés.El contenido original está disponible en stackexchange, a quien agradecemos la licencia cc by-sa 3.0 bajo la que se distribuye.
Loading...