Appel d'une variable 10000 fois en C++

jerome -  
Gorgo13 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Ma question était posée dans un autre post mais je vais la reformuler plus simplement: Peut_on appeler une variable locale n fois, avec n un très grand nombre, 10000 par exemple. C'est à dire une boucle du type

void funtion1()
{
double price;
for(int i=0;i<10000;++i)
price=price+50;
}

4 réponses

Gorgo13
 
Pour accelerer l'execution des boucle contenant beaucoup d'elements, il est parfois utile d'utiliser un indice decremental plutot qu'incremental:

for (i=0;i<N;i++)
{
//...
}

et plus long que

for (i=N-1;i>=0;i--)
{
//...
}

La raison etant que dans une boucle for, le processeur soustrait l'indice courant "i" a "N" et le compare a zero. Donc dans le cas 1/, cette soustraction est repetee autant de fois que le nombre d'execution de la boucle. Dans le second cas, non. C'est donc TRES avantageux si on utilise une boucle avec un tres grand nombre de recursion, et avec un nombre d'instructions faibles a executer dans la boucle.
1
Zempachi Messages postés 7472 Date d'inscription   Statut Contributeur Dernière intervention   906
 
Beh oui c'est possible.
Simplement le temps de traitement peut être tres long suivant les opérations executées dans la boucle.
0
mamiemando Messages postés 33777 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
Gorgo13 > Je n'ai pas compris ton explication, pour moi i est décrémenté N fois aussi (dans le i--). La seule chose qui peut à la rigueur changer quelque chose c'est si tu préincrément ou post incrémente. Dans le cas de la pré incrémentation (++i) tu ne gardes pas une référence sur la variable incrémentée, contrairement à la version post incrémentale (I++). En plus j'ai du mal à comprendre où tu vois des récursions dans le code en question, tu veux plutôt parler d'itérations ?

jerome > Il faut juste veiller à ne pas dépasser la valeur max codée pour un entier classique (le programme ne te préviendra même pas si ça t'arrive). Tu peux préciser le nombre de bits utilisés pour coder un entier (short int, int,, long int...). Le fait d'utiliser un unsigned permet de doubler le spectre de valeur puisque tu gagnes un bit pour coder ton entier (ça suppose bien sûr de manipuler un entier qui reste positif !). C'est a priori la seule limite que tu peux avoir sur l'incrémentation de la variable price, car à part ça il n'y a aucun soucis.

Bonne chance
0
Gorgo13 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   23
 
Mamiemando,

dans une boucle incrementale, for (i=0;i<N;i++), le processeur teste, a chaque iteration:

N-i = 0? si oui, on arrete la boucle, sinon, on continue.

Alors que dans une boucle decrementales, le processeur compare DIRECTEMENT l'indice "i" a 0. Donc dans le premier cas, une soustraction ("N-i") est executee a chaque iteration, alors qu'elle n'existe pas dans le second cas.

Sinon oui pour la recursion tu as raison, je voulais parler d'iterations.
0