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

Problem z funkcją rand

Object Storage Arubacloud
0 głosów
207 wizyt
pytanie zadane 1 marca 2016 w C i C++ przez niezalogowany
void trenuj_sila(){
    if(sila>=10){
        cs();
        cout << "+ Masz juz maksymalny poziom sily!" << endl;
        Sleep(3000);
    }
    else{
        cout << "+ Czas treningu nie moze przekraczac 9 minut!" << endl;
        cout << "Ile czasu chcesz trenowac (W MINUTACH!): ";
        cin >> czas;
            if(czas>9){
                cs();
                cout << "+ Czas nie moze przekraczac 9 minut!" << endl;
                Sleep(3000);
            }
            else{
            czas_treningu=czas*1; ///DO ZMIANY DO ZMIANY DO ZMIANY DO ZMIANY DO ZMIANY DO ZMIANY DO ZMIANY DO ZMIANY DO ZMIANY
        while(czas_treningu>0){
            czas_treningu--;
            system("cls");
            cout << "+ Aktualnie cwiczysz. Musisz poczekac jeszcze " << czas_treningu << " sekund do ukonczenia treningu." << endl;
            cout << "+ Po ukonczeniu treningu otrzymasz ------------------ punktow sily." << endl;
            Sleep(999);
        }
        srand(time(NULL));
        float random = rand(); 100 + 26;
        dodaj_sila = (czas*random)/100;
        sila = sila + dodaj_sila;
        cout << sila << endl;
            }
        }
}

 

Mam taki kod i po wylosowaniu liczby zmienna siła przyjmuje wartość taką jak np. 3000. Dlaczego tak się dzieje?

Zrobiłem od 100 do 25 ponieważ nie wiem jak inaczej zrobić od 0.25 do 1.00.

3 odpowiedzi

0 głosów
odpowiedź 1 marca 2016 przez Magicone Nałogowiec (45,100 p.)
Bo funkcji rand do losowania z przedziału powinieneś używać z operatorem dzielenia modulo.
komentarz 1 marca 2016 przez niezalogowany
Dzięki za pomoc.
komentarz 25 lipca 2017 przez jpacanowski VIP (101,940 p.)

Nie polecam takiego sposobu. Powinno się zawsze robić to korzystając z bardziej znaczących bitów.

j=1+(int) (10.0*rand()/(RAND_MAX+1.0));

zamiast

j=1+(rand() % 10);
komentarz 26 lipca 2017 przez Magicone Nałogowiec (45,100 p.)
powodzenia dla osoby która taki burdel będzie musiała po tobie czytać, bo zaoszczędzisz aż 1us.
komentarz 26 lipca 2017 przez jpacanowski VIP (101,940 p.)
To nie burdel, tylko programowanie... Co? jaki 1us? Użycie operacji na liczbach rzeczywistych w przeciwieństwie do operacji modulo bierze pod uwagę bardziej znaczące bity wygenerowanej liczby, które są bardziej losowe od bitów mniej znaczących.
komentarz 28 lipca 2017 przez Magicone Nałogowiec (45,100 p.)
jakim prawem mówisz o "większej losowości" przy pseudolosowości i ustalaniu liczb za pomocą wzorów matematycznych?
komentarz 28 lipca 2017 przez jpacanowski VIP (101,940 p.)
Przeczytaj dokładnie jeszcze raz co napisałem, i tak do skutku aż zrozumiesz...
0 głosów
odpowiedź 1 marca 2016 przez Radfler VIP (101,030 p.)
float random = rand(); 100 + 26;

Po co ten średnik po rand?

komentarz 1 marca 2016 przez niezalogowany
Ok, mój błąd :)
0 głosów
odpowiedź 28 lipca 2017 przez mokrowski Mędrzec (155,460 p.)
Polecam się zapoznać aby użyć sensowniejszego sposobu:

https://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful

Podobne pytania

0 głosów
1 odpowiedź 494 wizyt
pytanie zadane 24 maja 2017 w C i C++ przez MagicznyJasio Użytkownik (580 p.)
0 głosów
1 odpowiedź 510 wizyt
0 głosów
2 odpowiedzi 937 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...