2010-10-14 17 views
7

Ho provato per ore a trovare l'implementazione della funzione rand() utilizzata in gcc ... Sarebbe molto apprezzato se qualcuno potesse farmi riferimento al file contenente la sua implementazione o sito web con l'implemento.implementazione gcc di rand()

A proposito, quale directory (sto usando Ubuntu se questo è importante) contiene le implementazioni della libreria standard per il compilatore gcc?

+3

GCC non implementa affatto il comando rand(), è un compilatore, tutte le funzioni provengono dalle libaries, in questo caso dagli glibc. – theomega

+0

Oppure msgcrt nel caso di MinGW – rubenvb

risposta

9

L'implementazione della libreria C utilizzata da GCC nel progetto GNU GLIBC è disponibile.

È possibile scaricare i sorgenti e si dovrebbe trovare l'implementazione rand(). Sorgenti con definizioni di funzioni di solito non sono installate su una distribuzione Linux. Solo i file di intestazione che immagino tu già sappia sono solitamente memorizzati nella directory /usr/include.

Se si ha familiarità con GIT gestione del codice sorgente, si può fare:

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

Per ottenere GLIBC codice sorgente.

+4

Oppure, vai direttamente a: http://sourceware.org/git/?p=glibc.git;a=tree – progo

13

rand consiste in una chiamata a una funzione __random, che per lo più chiama semplicemente un'altra funzione denominata __random_r in random_r.c.

Si noti che i nomi delle funzioni di cui sopra sono collegamenti ipertestuali al repository di origine glibc, alla versione 2.15.

La libreria casuale di glibc supporta due tipi di generatore: uno semplice linear congruential uno e uno più sofisticato linear feedback shift register. È possibile costruire istanze di entrambi, ma il generatore globale predefinito, utilizzato quando si chiama rand, utilizza il generatore di registri a scorrimento di feedback lineare (vedere la definizione di unsafe_state.rand_type).

+0

Sembra che sia in qualche modo selezionabile tra un generatore lineare congruenziale e un " fantasioso "(sic) algorythm. I collegamenti – ninjalj

+0

sono interrotti –

+0

@ninjalj: hai ragione, e quello più esperto è quello predefinito. Mi sbagliavo. –