2010-10-14 9 views
7

Próbowałem od wielu godzin, aby znaleźć implementację funkcji rand() używanej w gcc ... Byłoby bardzo docenione, gdyby ktoś mógł odwołać mnie do pliku zawierającego jego implementację lub stronę z implementacja.implementacja gcc rand()

Przy okazji, który katalog (używam Ubuntu, jeśli to ma znaczenie) zawiera standardowe implementacje biblioteki dla kompilatora gcc?

+3

GCC nie implementuje w ogóle funkcji rand(), jest to kompilator, wszystkie funkcje pochodzą z bibliotek, w tym przypadku z glibc. – theomega

+0

Lub msvcrt w przypadku MinGW – rubenvb

Odpowiedz

9

Znajdziesz implementację bibliotek C używaną przez GCC w projekcie GNU GLIBC.

Możesz pobrać jego źródła i powinieneś znaleźć implementację rand(). Źródła z definicjami funkcji zwykle nie są instalowane w dystrybucji Linuksa. Tylko pliki nagłówkowe, które jak już wiesz, są zwykle przechowywane w katalogu /usr/include.

Jeśli jesteś zaznajomiony z GIT zarządzania kodem źródłowym, można zrobić:

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

Aby uzyskać kod źródłowy glibc.

+4

Lub skocz w prawo w: http://sourceware.org/git/?p=glibc.git;a=tree – progo

13

rand składa się z wywołania funkcji __random, która najczęściej wywołuje inną funkcję o nazwie __random_r w random_r.c.

Należy zauważyć, że powyższe nazwy funkcji stanowią hiperłącza do repozytorium źródła glibc w wersji 2.15.

Biblioteka losowa biblioteki glibc obsługuje dwa rodzaje generatorów: prosty, jeden, i bardziej wyrafinowany. Możliwe jest konstruowanie instancji jednego z nich, ale domyślny generator globalny, używany podczas wywoływania rand, wykorzystuje generator liniowego rejestru przesuwnego (patrz definicja unsafe_state.rand_type).

+0

Wygląda na to, że jest jakoś wybierany między liniowym generatorem kongruencji a " fantyzm "(sic) algorytm. – ninjalj

+0

linki są zerwane –

+0

@ninjalj: Masz rację, a ten, kto jest bardziej doświadczony, jest domyślny. Myliłem się. –