Site Perso de

Thomas JANNAUD

Des actualités personnelles sous un style impersonnel, et inversement.



Snippets iOS
Courts et efficaces / Short and simple. In French and English 19 Février 2009

First part in French, 2nd part in English

Pour tirer un nombre au hasard :

srandom([NSDate timeIntervalSinceReferenceDate]);
pour initialiser le générateur (à ne faire qu'une seule fois, au lancement de l'application par exemple) puis
random()
renvoie un entier (pseudo) aléatoire entre 0 et RAND_MAX.

Ainsi,
srandom([NSDate timeIntervalSinceReferenceDate]);
int a = random() % 10
renvoie un entier entre 0 et 9, et double b = (double) (random()) / (double)(RAND_MAX);
renvoie un nombre à virgule entre 0 et 1.

Pour chronométrer

NSDate* debut = [[NSDate date] retain];
pour "lancer" le chrono, et
NSTimeInterval since = [debut timeIntervalSinceNow];
double a = -((double) (since));
pour "l'arrêter".

Remarque : mettre 'debut' comme une variable globale pour pouvoir chronométrer depuis 2 fonctions différentes.

Notez que l'on ne "lance" rien (au contraire de NSRunLoop - addTimer), on fixe simplement une date comme date de référence, et on regarde à un moment donné quel est l'intervalle de temps entre ce moment et cette date de référence. C'est donc un nombre négatif.
Un peu bête comme technique, mais j'ai mis beaucoup de temps à la trouver étant donné que la plupart des méthodes retournent le nombre de secondes écoulées depuis le 1er janvier 1970 (soit un nombre entier de secondes). Pas pratique pour chronométrer des centièmes !


To generate a random number

srandom([NSDate timeIntervalSinceReferenceDate]);
to initialise the generator (do that just once, e.g at the launch of the program)
random() will return an integer between 0 and RAND_MAX.

For example,
srandom([NSDate timeIntervalSinceReferenceDate]);
int a = random() % 10
will return an integer from 0 to 9, and
double b = (double) (random()) / (double)(RAND_MAX);
will give you a float number between 0 and 1.

To chronometer

NSDate* start = [[NSDate date] retain]; will "start" the chrono, and br/> NSTimeInterval since = [debut timeIntervalSinceNow];
double a = -((double) (since));
will "stop" it, variable 'a' containing the elapsed time.

Remark : you should write 'start' as a global variable, so as to launch and stop the chronometer from 2 different functions.

Note that nothing is "launched" as with NSRunLoop - addTimer ; here we simply fix a date as a reference and, we eventually look what is the elapsed time since this reference date (which leads to a negative number).
It seems "stupid", but it took me a lot of time to figure it out since most other methods return the number of elapsed seconds since January 1th, 1970 (an integer). Not useful for accurate digits !

À lire aussi :
Laissez un commentaire !

Pas besoin de vous connecter, commencez à taper votre nom et une case "invité" apparaîtra.