Dlaczego maksymalna wartość wylosowanej liczby to 32767 ?

Odpowiedz Nowy wątek
2018-12-06 14:00
0

Hmm jak w temacie, przy wykorzystaniu:

srand(time(NULL));
rand()%1000000+1; // przykładowo//

Pozostało 580 znaków

2018-12-06 14:01
kq
2018-12-06 14:03
0
kq napisał(a):

Bo używasz rand(). https://dsp.krzaq.cc/post/180/nie-uzywaj-rand-cxx-ma-random/

No wiem :D, że to wynika z tego że korzystam z rand(), dlatego właśnie o to pytam, z czego to wynika, że to akurat taka to max liczba? Czy ktoś wie?

Pozostało 580 znaków

2018-12-06 14:05
kq
4

Implementacja (mniej więcej: kompilator) może sobie wybrać RAND_MAX i ustawić takie jak jej się podoba, minimum to właśnie 32767. Twórcy twojego kompilatora (MSVC jakiś starszy? Czy mingw/devcpp z ery prezydenta Busha?) poszli na łatwiznę.


Pozostało 580 znaków

2018-12-06 14:08
0

Otóż moje pytanie wzięło się stąd że pisze losowanie z rand'em: ; Wyniki nie przekraczaly ok40tys, wiec szukalem na innych forach i znalazlem takie info z tą max liczbą i chciałem wiedziec skąd to wynika, ale rozumiem że to wartość zależna od kompilatora.. W takim razie nowsze kompilatory przekroczą przykładowo .. milion?

#include <iostream>
#include <cstdlib>
#include <time.h>
#include <windows.h>
using namespace std;

int main()
{
    cout << "Ile liczb losowac?";
    int dlugosc_tab;
    cin >> dlugosc_tab;

    int * tablica;
    tablica = new int [dlugosc_tab];

    srand(time(NULL));
    for (int i=0; i<dlugosc_tab;i++)
    {
        *(tablica+i) = rand()%1000000+1;
        cout << endl << *(tablica+i);

        if (*(tablica+i)>100000)
        {
            cout << "Przekroczono 100000 ";
            getchar();
            exit(0);
        }
        Sleep(50);
    }
    getchar();
    return 0;
}
edytowany 1x, ostatnio: Spark_of_hope, 2018-12-06 14:09

Pozostało 580 znaków

2018-12-06 14:09
3

C++11 daje ci inne generatory liczb pseudolosowych, które są lepsze i wyraźnie zdefiniowane.
https://en.cppreference.com/w/cpp/header/random


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

2018-12-06 14:10
kq
2

U mnie RAND_MAX = INT_MAX, czyli 2³²-1. Mimo wszystko ponawiam apel: piszesz w C++ - nie używaj randa


Pozostało 580 znaków

2018-12-06 14:10
0
MarekR22 napisał(a):

C++11 daje ci inne generatory liczb pseudolosowych, które są lepsze i wyraźnie zdefiniowane.
https://en.cppreference.com/w/cpp/header/random

Jasne, chciałem znać tylko powód dlaczego rand() daje takie ograniczenie...

Pozostało 580 znaków

2018-12-06 14:13
0
kq napisał(a):

U mnie RAND_MAX = INT_MAX, czyli 2³²-1.

A u mnie po sprawdzeniu RAND_MAX to 1447632767 :p

Taki wynik po dodaniu bibliotek w moim programie u góry - Spark_of_hope 2018-12-06 14:25
W nowym pustym projekcie jest to faktycznie 0x7fff czyli te 32tys iles tam.. :) - Spark_of_hope 2018-12-06 14:27

Pozostało 580 znaków

2018-12-06 14:13

Proste: mvsc to stary kompilator, który działał jeszcze na systemach 16 bitowych, więc generator ten był dostosowany do liczb 16 bitowych. A jako, że uwzględnili znak to ostało się 15 bitów.
Potem trzeba było utrzymać wsteczną kompatybilność i masz taki kwiatek.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

2018-12-06 14:17
0

2^15 - 1 = 32767. I wszystko jasne, dzięki:p

edytowany 2x, ostatnio: Spark_of_hope, 2018-12-06 14:18

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0