• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kody źródłowe zaimplementowanych funkcji

0 głosów
377 wizyt
pytanie zadane 6 września 2017 w C i C++ przez rocknroll111 Nowicjusz (140 p.)

Pytanie od zielonego laika, mam nadzieję że ma ono sens:
Jestem na etapie przerabiania losowości w programach w oparciu o funkcję srand(time(NULL)) w c++; W materiale dotyczącym tego zagadnienia spotkałem się ze stwierdzeniem, tutaj cytuję: "Do wygenerowania liczby pseudolosowej komputer będzie potrzebować pewnej wartości, zwanej ziarnem, która zostanie poddana transformacjom matematycznym przekształcającym ją w kolejną liczbę. [...] Używane w tym celu przekształcenia matematyczne zostały starannie dobrane,[...]".
Pytanie brzmi: gdzie i czy w ogóle mógłbym podejrzeć kod tej i innych funkcji "fabrycznie" zaimplementowanych w IDE? 

komentarz 6 września 2017 przez DragonCoder Nałogowiec (36,500 p.)
Ale funkcja do losowania liczb to rand, a funkcja srand pobiera ilosc sekund, ltore uplynely od roku 1970. Jak sam uauwazyles, zeby uzyc tej funkcji potrzebujesz inplementacji boblioteki stdlib, jesli sie nie myle. Oznscza to, ze funkcja ta jak i inne, zawarte sa w bibliotekach, a zeby zobaczyc inne funkcje, wystarczy zajrzec do dokumentacji :)
komentarz 6 września 2017 przez rocknroll111 Nowicjusz (140 p.)
Czaję, wiem o co chodzi. Tylko ja nie pytałem o zbiór funkcji dostępnych w danej bibliotece, lecz algorytmy tych funkcji.
Strona C++ Reference podaje zbiór bibliotek i zawartych w nich funkcji, przykład zastosowania i słowne(pisemne?) wyjaśnienie zasady działania... a mi chodzi o kod źródłowy tych funkcji. Źródłowy, maszynowy zapis kodu np. funkcji rand().

Mam nadzieję że już wiadomo o co mi chodzi :)
2
komentarz 6 września 2017 przez criss Mędrzec (172,570 p.)

@DragonCoder:

funkcja srand pobiera ilosc sekund, ktore uplynely od roku 1970.

srand służy do inicjalizacji ziarna (wartości używanej przez rand przy "losowaniu"). Tak, często inicjalizuje się ją wywołaniem time(), ale tylko dlatego, żeby to nie była stała. Także srand nie pobiera "ilości sekund które upłynęły od roku 1970".

@rocknroll111:

Do kodu źródłowego ciężko się dostać, bo nieszablonowe funkcje są już skompilowane i zamknięte w jakichś bibliotekach. Implementacje można jednak znaleźć gdzieś w internetach. Nie wiem czy to aktualne implementacje, ale na pewno mogą ci dać obraz tego, jak to wygląda:

1 odpowiedź

0 głosów
odpowiedź 6 września 2017 przez unknown Nałogowiec (39,560 p.)

Zależy z jakiej implementacji korzystasz. Najpopularniejsze to:

Dla C

  • glibc
  • musl
  • dietlibc

Dla C++

  • libstdc++
  • libc++

Wystarczy, że poszukasz ich kodów źródłowych i będziesz wiedział co i jak. 

Jednak podejrzewam, że większość implementacji korzysta z LCG: https://en.m.wikipedia.org/wiki/Linear_congruential_generator

Podobne pytania

0 głosów
3 odpowiedzi 610 wizyt
pytanie zadane 16 sierpnia 2019 w Sprawy forum przez niezalogowany
0 głosów
2 odpowiedzi 296 wizyt
pytanie zadane 15 października 2019 w Inne języki przez LubieNalesniki Użytkownik (610 p.)
0 głosów
1 odpowiedź 766 wizyt
pytanie zadane 26 kwietnia 2015 w C i C++ przez TheFunny Gaduła (3,420 p.)

93,427 zapytań

142,421 odpowiedzi

322,649 komentarzy

62,787 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...