2010-10-14 21 views
7

He intentado durante horas encontrar la implementación de la función rand() utilizada en gcc ... Sería muy apreciado que alguien pudiera consultarme el archivo que contiene su implementación o sitio web con la implementación.gcc implementation of rand()

Por cierto, ¿qué directorio (estoy usando Ubuntu si eso importa) contiene las implementaciones de la biblioteca c estándar para el compilador gcc?

+3

GCC no implementa el rand() en general, es un compilador, todas las funciones provienen de librerias, en este caso de la glibc. – theomega

+0

O msvcrt en caso de MinGW – rubenvb

Respuesta

9

Encontrará la implementación de la biblioteca C utilizada por GCC en el proyecto GNU GLIBC.

Puede descargar las fuentes y debe encontrar la implementación rand(). Las fuentes con definiciones de funciones generalmente no están instaladas en una distribución de Linux. Solo los archivos de encabezado que supongo que ya conoces suelen almacenarse en el directorio /usr/include.

Si está familiarizado con GIT administración de código fuente, que puede hacer:

$ git clone git://sourceware.org/git/glibc.git 

Para obtener el código fuente de glibc.

+4

O bien, vaya directo a: http://sourceware.org/git/?p=glibc.git;a=tree – progo

13

rand consiste en una llamada a una función __random, que en su mayoría simplemente llama a otra función llamada __random_r en random_r.c.

Tenga en cuenta que los nombres de las funciones anteriores son hipervínculos al repositorio de fuentes glibc, en la versión 2.15.

La biblioteca aleatoria glibc admite dos tipos de generador: uno simple linear congruential, y uno más sofisticado linear feedback shift register uno. Es posible construir instancias de cualquiera, pero el generador global predeterminado, que se usa cuando llama al rand, usa el generador de registro de desplazamiento de realimentación lineal (consulte la definición de unsafe_state.rand_type).

+0

Parece que de alguna manera se puede seleccionar entre un generador congruente lineal y un " más elegante "(sic) algorythm. – ninjalj

+0

enlaces están rotos –

+0

@ninjalj: Tiene razón, y el más lujoso es el predeterminado. Estaba equivocado. –