Appel d'une variable 10000 fois en C++
jerome
-
Gorgo13 Messages postés 12 Date d'inscription Statut Membre Dernière intervention -
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;
}
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;
}
A voir également:
- Appel d'une variable 10000 fois en C++
- Nommez une application d'appel vidéo ou de visioconférence - Guide
- Appel privé - Guide
- Double appel - Guide
- Signal d'appel - Forum iPhone
- Site paiement plusieur fois carte nickel forum - Forum Consommation & Internet
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.
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.
Beh oui c'est possible.
Simplement le temps de traitement peut être tres long suivant les opérations executées dans la boucle.
Simplement le temps de traitement peut être tres long suivant les opérations executées dans la boucle.
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
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
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.
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.