Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di hfish
    Registrato dal
    Dec 2000
    Messaggi
    3,180

    [c] funzione che estragga 1/0 con distribuzione uniforme

    mi servirebbe una funzione che con distribuzione uniforme estragga 1 o 0

    per ora ho fatto una semplice rand() % 2 per vedere se il numero estratto è pari o dispari, e torno 1 o 0 a seconda appunto che il numero sia pari o dispari

    tuttavia la rand() non mi fornisce la garanzia che i numeri pari e dispari siano estratti uniformemente con probabilità P=1/2

    qualche consiglio?

    grazie mille
    Non dobbiamo trascurare la probabilità che il costante inculcare la credenza in Dio nelle menti dei bambini possa produrre un effetto così forte e duraturo sui loro cervelli non ancora completamente sviluppati, da diventare per loro tanto difficile sbarazzarsene, quanto per una scimmia disfarsi della sua istintiva paura o ripugnanza del serpente.

  2. #2
    La rand se non sbaglio garantisce una distribuzione uniforme dei dati nell'intervallo 0 - RAND_MAX; se l'uso dell'operatore modulo può sballare un po' la questione sugli intervalli ampi, comunque su intervalli piccoli (divisori di RAND_MAX) dovrebbe dare una distribuzione corretta - sull'intervallo 0-1, poi, dovrebbe essere praticamente perfetta. Ho fatto una prova al volo e in effetti la distribuzione, su 2^31 prove, sulla mia macchina è corretta.
    codice:
    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    using namespace std;
    
    #define N   2
    #define MAX ((unsigned long)(1<<31))
    
    int main()
    {
        unsigned long val[N]={0};
        srand(time(NULL));
        for(unsigned long i=0; i<MAX; i++)
            val[rand()%N]++;
        for(int i=0;i<N;i++)
            cout<<i<<": "<<val[0]<<endl;
        return 0;
    }
    Output:
    codice:
    matteo@teolapubuntu:~/cpp$ g++ -O3 -Wall -Wextra randtest.cpp -o randtest.x
    matteo@teolapubuntu:~/cpp$ ./randtest.x 
    0: 1073736438
    1: 1073736438
    Comunque esistono diverse librerie scientifiche (ad esempio la GNU Scientific Library) che forniscono i generatori di numeri casuali più vari, se ti servono garanzie "serie" ti consiglio di adoperarle.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di hfish
    Registrato dal
    Dec 2000
    Messaggi
    3,180
    gentile, preciso, corretto

    che si può volere di più?

    grazie mille
    Non dobbiamo trascurare la probabilità che il costante inculcare la credenza in Dio nelle menti dei bambini possa produrre un effetto così forte e duraturo sui loro cervelli non ancora completamente sviluppati, da diventare per loro tanto difficile sbarazzarsene, quanto per una scimmia disfarsi della sua istintiva paura o ripugnanza del serpente.

  4. #4
    Originariamente inviato da hfish
    gentile, preciso, corretto

    che si può volere di più?
    Un Lucano?
    grazie mille
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.