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
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;
}
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 inconnu - Guide
- Qu'est ce qu'une femme fait 3 fois par jour et un homme une fois dans sa vie ✓ - Forum Google Chrome
- Devinette ✓ - Forum Loisirs / Divertissements
- Signal d'appel - Forum iPhone
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.
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
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.
Simplement le temps de traitement peut être tres long suivant les opérations executées dans la boucle.
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
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
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
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
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.
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.