2009-09-04 12 views
5

Stavo usando la funzione arc4random() per generare un gruppo casuale e una sequenza di numeri, ma mi è stato detto che questo era eccessivo e che dovevo usare la funzione random() anziché. Tuttavia, la funzione random() mi dà lo stesso gruppo e sequenza di numeri ogni volta.Generazione di numeri casuali nell'obiettivo C per iPhone SDK

Io chiamo srand (time (0)) una volta quando la mia app inizia per seminare la funzione random(). Hai mai bisogno di risettare la funzione random()?

Mi manca qualcosa?

Grazie.

risposta

2

No, non è necessario eseguire il seeding del generatore di numeri casuali. Vi è un'ulteriore uniformità ottenuta generando una certa quantità di numeri e gettandoli via, ma a meno che non si stia cercando la generazione di numeri casuali a livello di sicurezza non è necessario. Per la maggior parte degli scopi un generatore di numeri casuali correttamente seminato è abbastanza uniforme.

4

Prima di tutto, chi ti ha detto che arc4random era eccessivo? Lo uso nei miei progetti, e (a) soddisfa i miei requisiti, (b) non succhia risorse (almeno visibili all'utente o ovvio per me), e (c) è stato banale da implementare, quindi non vedo davvero come un simile uso nel tuo codice possa essere chiamato "overkill".

Secondo, srand() semina la funzione rand(), non random(), quindi potrebbe essere il problema. E no, non dovresti eseguire il seeding del generatore in qualsiasi momento durante l'esecuzione del programma: una volta all'avvio è sufficiente.

+0

Come si semina quindi la funzione random()? –

+0

Prova la funzione 'randomize()'. – Tim

+1

arc4random() non è eccessivo e ti darà risultati sostanzialmente migliori rispetto a random(). –

Problemi correlati