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

Problem z funkcją rand

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
292 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 (156,420 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ź 570 wizyt
pytanie zadane 24 maja 2017 w C i C++ przez MagicznyJasio Użytkownik (580 p.)
0 głosów
1 odpowiedź 556 wizyt
0 głosów
2 odpowiedzi 994 wizyt

93,187 zapytań

142,201 odpowiedzi

322,012 komentarzy

62,514 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2127p. - dia-Chann
  2. 2092p. - Łukasz Piwowar
  3. 2079p. - Łukasz Eckert
  4. 2037p. - Tomasz Bielak
  5. 2006p. - Michal Drewniak
  6. 2006p. - rucin93
  7. 2005p. - Łukasz Siedlecki
  8. 1964p. - CC PL
  9. 1946p. - Adrian Wieprzkowicz
  10. 1901p. - Mikbac
  11. 1744p. - rafalszastok
  12. 1734p. - Anonim 3619784
  13. 1586p. - Dawid128
  14. 1520p. - Marcin Putra
  15. 1480p. - ssynowiec
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...