Appel d'une variable 10000 fois en C++

Fermé
jerome - 15 oct. 2007 à 11:24
Gorgo13 Messages postés 12 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 15 novembre 2009 - 16 oct. 2007 à 01:32
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

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 vendredi 14 octobre 2005 Statut Contributeur Dernière intervention 5 juin 2020 906
15 oct. 2007 à 12:00
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 33654 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2025 7 847
15 oct. 2007 à 19:22
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 lundi 15 octobre 2007 Statut Membre Dernière intervention 15 novembre 2009 23
16 oct. 2007 à 01:32
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