Correttezza programma.

di il
17 risposte

17 Risposte - Pagina 2

  • Re: Correttezza programma.

    Non ho sempre la possibilità di valutare il codice con velocità, specialmente durante le ferie ... vorrei evitare di dare risposte affrettate ...

    In ogni caso, è possibile che anche con i microsecondi l'esecuzione possa essere più veloce e quindi ripetere alcuni semi.

    Passerei quindi ad usare l'istruzione RDTSC delle CPU x86 per la srand. Posto un piccolo esempio basato su Windows/Visual C ma anche su Linux puoi eseguire una istruzione asm RDTSC e ottenere il risultato
    
    #include <iostream>
    #include <cstdlib>
    #include <intrin.h>
    
    #pragma intrinsic(__rdtsc)
    
    using namespace std;
    
    class dado
    {
    public:
    
        dado()
        {
            srand((unsigned int)__rdtsc());
        }
    
        unsigned int effettua_lancio()
        {
            return rand() % 6 + 1;
        }
    };
    
  • Re: Correttezza programma.

    Mi sembra di capire che in questo caso non si considera più il tempo in senso stretto, ma i clock del processore, giusto?

    Ad ogni modo adesso sembra funzionare.

    Giusto per completezza, quando parlavo di utilizzare un membro statico, mi riferivo a qualcosa del genere:
    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    
    using namespace std;
    
    class dado
    {
        static bool flag;
    public:
    
        dado()
        {
            if(flag)
            {
                srand(time(0));
                flag = false;
            }
        }
    
        unsigned int effettua_lancio()
        {
            return rand() % 6 + 1;
        }
    };
    
    bool dado::flag = true;
    
    int main()
    {
        for(unsigned int i = 0; i < 30; ++i)
        {
            dado a;
            for(unsigned int j = 0; j < 1; ++j)
            {
                cout << a.effettua_lancio() << "\t";
            }
            cout << endl;
        }
    }
  • Re: Correttezza programma.

    Nippolo ha scritto:


    Mi sembra di capire che in questo caso non si considera più il tempo in senso stretto, ma i clock del processore, giusto?
    Corretto. Tanto ai fini del seed è necessario un numero non importa se è un tempo o altro

    E ha il pregio di essere trasparente all'utilizzatore. Cosa che non è così con il membro statico (di cui non si deve dimenticare l'inizializzazione quando serve) né con l srand esterna per lo stesso motivo.
Devi accedere o registrarti per scrivere nel forum
17 risposte