Limite superiore esclusivo nell'intervallo numerico casuale

4

Perché i generatori di numeri casuali delle lingue tendono a restituire un valore esclusivo del limite superiore dell'intervallo?

Ad esempio, un intervallo implicito -

Metodo random() di JavaScript "Restituisce un numero casuale compreso tra 0 (incluso) e 1 (esclusivo)"

Un intervallo specificato esplicitamente -

System.Random.Next(minValue, maxValue) : maxValue : il limite superiore esclusivo del numero casuale restituito. maxValue deve essere maggiore o uguale a minValue

    
posta John K 27.02.2016 - 14:24
fonte

1 risposta

9

Sia Java che .net tendono a favorire questa forma di intervallo (che è generalmente noto come un intervallo semiaperto) in tutte le circostanze, ad esempio lo usano anche per selezionare gli intervalli nelle operazioni di sottostringa e nelle operazioni su sezioni di array. Il motivo principale per favorirlo è che significa che il calcolo end - start fornisce un risultato del numero di elementi inclusi nell'intervallo (ad esempio, per un intervallo da 1 a 7, 7-1 = 6 valori, Ie 1, 2, 3, 4, 5, 6) quando si lavora con numeri interi.

C'è anche un altro motivo per i generatori di numeri casuali in virgola mobile. Un tale generatore di solito funziona assegnando bit casuali alla mantissa e lasciando l'esponente impostato a zero. Ciò si traduce in un valore compreso tra 0 e 1-2 ^ (- b) inclusi, dove b è il numero di bit nella mantissa, cioè forma un intervallo semiaperto tra 0 e 1. Questo è molto più semplice di dover includere 1 nell'intervallo perché richiederebbe un caso speciale nel codice di generazione.

Un ulteriore vantaggio è che quando un numero in virgola mobile di questo tipo viene moltiplicato per un intero e arrotondato per troncamento, il risultato ha una distribuzione uniforme. Se fosse in grado di generare 1, nel caso molto improbabile che ciò accadesse effettivamente, sarebbe arrotondato al valore massimo, ma non per nessun altro risultato. Questo sarebbe molto difficile da lavorare.

    
risposta data 27.02.2016 - 15:22
fonte

Leggi altre domande sui tag