Ci-dessous le code modifié :
Ci-dessous le code modifié :
Ci-dessous le code modifié :
*) je trouve que la multiplicité des assert nuisent à la lisibilité
(normal je n'ai pas l'habitude de les utiliser)
*) je trouve que la multiplicité des assert nuisent à la lisibilité
(normal je n'ai pas l'habitude de les utiliser)
*) je trouve que la multiplicité des assert nuisent à la lisibilité
(normal je n'ai pas l'habitude de les utiliser)
Si tu connais un peu Tolkien, Aragorn est appele Grand Pas, ce qui est la
traduction a peu pres fidele de Strider dans la VO.
Si tu connais un peu Tolkien, Aragorn est appele Grand Pas, ce qui est la
traduction a peu pres fidele de Strider dans la VO.
Si tu connais un peu Tolkien, Aragorn est appele Grand Pas, ce qui est la
traduction a peu pres fidele de Strider dans la VO.
On 15 nov, 01:09, candide wrote:Jean-Marc Bourguet a écrit :#define BORNE 10*10*10
BORNE devrait etre 10000
Oui, mon intention était de remplacer 10000 par 10*10*10*10 pour voir si
ça ralentissait l'exécution.
Alors c'est
#define BORNE (10*10*10)
sinon le comportement dépend de l'utilisation.
Mais c'est strictement équivallent à 1000, car une expression
constante est évaluée par le compilateur.
On 15 nov, 01:09, candide <cand...@free.invalid> wrote:
Jean-Marc Bourguet a écrit :
#define BORNE 10*10*10
BORNE devrait etre 10000
Oui, mon intention était de remplacer 10000 par 10*10*10*10 pour voir si
ça ralentissait l'exécution.
Alors c'est
#define BORNE (10*10*10)
sinon le comportement dépend de l'utilisation.
Mais c'est strictement équivallent à 1000, car une expression
constante est évaluée par le compilateur.
On 15 nov, 01:09, candide wrote:Jean-Marc Bourguet a écrit :#define BORNE 10*10*10
BORNE devrait etre 10000
Oui, mon intention était de remplacer 10000 par 10*10*10*10 pour voir si
ça ralentissait l'exécution.
Alors c'est
#define BORNE (10*10*10)
sinon le comportement dépend de l'utilisation.
Mais c'est strictement équivallent à 1000, car une expression
constante est évaluée par le compilateur.
Jean-Marc Bourguet a écrit :candide writes:au moins deux problemes ici:
* %N doit se faire sur tout le calcul
Pas compris, de quel calcul tu parles ?
Dans
while (!(t[3][col] + t[2][col] * 10 + t[1][col] * 100 + t[0][col] * 1000 % N))
Le % N ne s'applique pas à la même chose que dans ta version corrigée:while (col < 4
&& (t[3][col] + t[2][col] * 10 + t[1][col] * 100 +
t[0][col] * 1000) % N == 0)
Je suis certainement bouché mais je ne vois pas le problème : d'après le
tableau des priorités des opérateurs, il me semblaient bien que les
expressions étaient équivalentes : % est prioritaire sur [] et + et de
priorité égale avec * et l'associativité est de gauche à droite.
Jean-Marc Bourguet a écrit :
candide <candide@free.invalid> writes:
au moins deux problemes ici:
* %N doit se faire sur tout le calcul
Pas compris, de quel calcul tu parles ?
Dans
while (!(t[3][col] + t[2][col] * 10 + t[1][col] * 100 + t[0][col] * 1000 % N))
Le % N ne s'applique pas à la même chose que dans ta version corrigée:
while (col < 4
&& (t[3][col] + t[2][col] * 10 + t[1][col] * 100 +
t[0][col] * 1000) % N == 0)
Je suis certainement bouché mais je ne vois pas le problème : d'après le
tableau des priorités des opérateurs, il me semblaient bien que les
expressions étaient équivalentes : % est prioritaire sur [] et + et de
priorité égale avec * et l'associativité est de gauche à droite.
Jean-Marc Bourguet a écrit :candide writes:au moins deux problemes ici:
* %N doit se faire sur tout le calcul
Pas compris, de quel calcul tu parles ?
Dans
while (!(t[3][col] + t[2][col] * 10 + t[1][col] * 100 + t[0][col] * 1000 % N))
Le % N ne s'applique pas à la même chose que dans ta version corrigée:while (col < 4
&& (t[3][col] + t[2][col] * 10 + t[1][col] * 100 +
t[0][col] * 1000) % N == 0)
Je suis certainement bouché mais je ne vois pas le problème : d'après le
tableau des priorités des opérateurs, il me semblaient bien que les
expressions étaient équivalentes : % est prioritaire sur [] et + et de
priorité égale avec * et l'associativité est de gauche à droite.
-ed- a écrit :#define BORNE (10*10*10)
Mais c'est strictement équivallent à 1000, car une expression
constante est évaluée par le compilateur.
Non, on en a discuté dans un fil précédent, la norme ne garantit rien.
-ed- a écrit :
#define BORNE (10*10*10)
Mais c'est strictement équivallent à 1000, car une expression
constante est évaluée par le compilateur.
Non, on en a discuté dans un fil précédent, la norme ne garantit rien.
-ed- a écrit :#define BORNE (10*10*10)
Mais c'est strictement équivallent à 1000, car une expression
constante est évaluée par le compilateur.
Non, on en a discuté dans un fil précédent, la norme ne garantit rien.
En news:491f4f99$0$14922$, candide va escriure:-ed- a écrit :#define BORNE (10*10*10)
Mais c'est strictement équivallent à 1000, car une expression
constante est évaluée par le compilateur.
Non, on en a discuté dans un fil précédent, la norme ne garantit rien.
On a pas dû lire le même fil, alors.
En news:49172a5f$0$17384$, candide va escriure:#include <stdio.h>
#define A 2
#define B 5
int main(void) {
int i;
for (i = 0; i < A * B; i++) printf("toton");
return 0; }
Ai-je une quelconque garantie que l'expression A*B ne sera pas
réévaluée à chaque tour de boucle pendant l'exécution ?
Garantie formelle, non.
Ai-je une quelconque garantie que l'expression A*B ne sera pas réévaluée
à chaque tour de boucle pendant l'exécution ?
Non. Cependant en pratique A*B sera évalué à la compilation.
La norme ne garantit pas le _moment_ où se fait l'évaluation, et il y a
aussi quelques autres subtilités sur le préprocesseur (genre la valeur de
#BORNE), certes, donc /stricto sensu/ ce n'est pas « strictement
équivalent ».
Mais si on cesse de pinailler, oui, la norme garantit bien que la *valeur*
de BORNE sera 10000.
En news:491f4f99$0$14922$426a74cc@news.free.fr, candide va escriure:
-ed- a écrit :
#define BORNE (10*10*10)
Mais c'est strictement équivallent à 1000, car une expression
constante est évaluée par le compilateur.
Non, on en a discuté dans un fil précédent, la norme ne garantit rien.
On a pas dû lire le même fil, alors.
En news:49172a5f$0$17384$426a74cc@news.free.fr, candide va escriure:
#include <stdio.h>
#define A 2
#define B 5
int main(void) {
int i;
for (i = 0; i < A * B; i++) printf("toton");
return 0; }
Ai-je une quelconque garantie que l'expression A*B ne sera pas
réévaluée à chaque tour de boucle pendant l'exécution ?
Garantie formelle, non.
Ai-je une quelconque garantie que l'expression A*B ne sera pas réévaluée
à chaque tour de boucle pendant l'exécution ?
Non. Cependant en pratique A*B sera évalué à la compilation.
La norme ne garantit pas le _moment_ où se fait l'évaluation, et il y a
aussi quelques autres subtilités sur le préprocesseur (genre la valeur de
#BORNE), certes, donc /stricto sensu/ ce n'est pas « strictement
équivalent ».
Mais si on cesse de pinailler, oui, la norme garantit bien que la *valeur*
de BORNE sera 10000.
En news:491f4f99$0$14922$, candide va escriure:-ed- a écrit :#define BORNE (10*10*10)
Mais c'est strictement équivallent à 1000, car une expression
constante est évaluée par le compilateur.
Non, on en a discuté dans un fil précédent, la norme ne garantit rien.
On a pas dû lire le même fil, alors.
En news:49172a5f$0$17384$, candide va escriure:#include <stdio.h>
#define A 2
#define B 5
int main(void) {
int i;
for (i = 0; i < A * B; i++) printf("toton");
return 0; }
Ai-je une quelconque garantie que l'expression A*B ne sera pas
réévaluée à chaque tour de boucle pendant l'exécution ?
Garantie formelle, non.
Ai-je une quelconque garantie que l'expression A*B ne sera pas réévaluée
à chaque tour de boucle pendant l'exécution ?
Non. Cependant en pratique A*B sera évalué à la compilation.
La norme ne garantit pas le _moment_ où se fait l'évaluation, et il y a
aussi quelques autres subtilités sur le préprocesseur (genre la valeur de
#BORNE), certes, donc /stricto sensu/ ce n'est pas « strictement
équivalent ».
Mais si on cesse de pinailler, oui, la norme garantit bien que la *valeur*
de BORNE sera 10000.
Je ne dis pas le contraire. Le problème n'est pas la valeur. Le problème
est que je ne souhaite pas que cette valeur soit recalculée à chaque
tour de boucle (cf. la place de BORNE dans mon code, il figure dans des
expressions régissant des boucles for) et apparemment, la norme ne me
donne aucune garantie de cela même si selon toute vraisemblance, tout
compilateur digne de ce nom optimisera.
Pour une question de lisibilité, tu penses bien que je préfèrerais écrire
#define BASE 10
#define BORNE (BASE*BASE*BASE*BASE)
J'avoue que le 3*n dans l'expression de contrôle de la boucle me laisse
plus que perplexe: on n'a aucune garantie que ce produit 3*n n'est pas
recalculé n fois, si ?
Je ne dis pas le contraire. Le problème n'est pas la valeur. Le problème
est que je ne souhaite pas que cette valeur soit recalculée à chaque
tour de boucle (cf. la place de BORNE dans mon code, il figure dans des
expressions régissant des boucles for) et apparemment, la norme ne me
donne aucune garantie de cela même si selon toute vraisemblance, tout
compilateur digne de ce nom optimisera.
Pour une question de lisibilité, tu penses bien que je préfèrerais écrire
#define BASE 10
#define BORNE (BASE*BASE*BASE*BASE)
J'avoue que le 3*n dans l'expression de contrôle de la boucle me laisse
plus que perplexe: on n'a aucune garantie que ce produit 3*n n'est pas
recalculé n fois, si ?
Je ne dis pas le contraire. Le problème n'est pas la valeur. Le problème
est que je ne souhaite pas que cette valeur soit recalculée à chaque
tour de boucle (cf. la place de BORNE dans mon code, il figure dans des
expressions régissant des boucles for) et apparemment, la norme ne me
donne aucune garantie de cela même si selon toute vraisemblance, tout
compilateur digne de ce nom optimisera.
Pour une question de lisibilité, tu penses bien que je préfèrerais écrire
#define BASE 10
#define BORNE (BASE*BASE*BASE*BASE)
J'avoue que le 3*n dans l'expression de contrôle de la boucle me laisse
plus que perplexe: on n'a aucune garantie que ce produit 3*n n'est pas
recalculé n fois, si ?
Je ne dis pas le contraire. Le problème n'est pas la valeur. Le problème
est que je ne souhaite pas que cette valeur soit recalculée à chaque
tour de boucle (cf. la place de BORNE dans mon code, il figure dans des
expressions régissant des boucles for) et apparemment, la norme ne me
donne aucune garantie de cela même si selon toute vraisemblance, tout
compilateur digne de ce nom optimisera.
Je ne dis pas le contraire. Le problème n'est pas la valeur. Le problème
est que je ne souhaite pas que cette valeur soit recalculée à chaque
tour de boucle (cf. la place de BORNE dans mon code, il figure dans des
expressions régissant des boucles for) et apparemment, la norme ne me
donne aucune garantie de cela même si selon toute vraisemblance, tout
compilateur digne de ce nom optimisera.
Je ne dis pas le contraire. Le problème n'est pas la valeur. Le problème
est que je ne souhaite pas que cette valeur soit recalculée à chaque
tour de boucle (cf. la place de BORNE dans mon code, il figure dans des
expressions régissant des boucles for) et apparemment, la norme ne me
donne aucune garantie de cela même si selon toute vraisemblance, tout
compilateur digne de ce nom optimisera.
Mais la norme ne te garantie pas non plus que le compilo ne fera pas
calculer au processeur les statistiques du dernier tierce entre
chaque intruction, ou qu'il utilisera bien l'instruction de multiplication
du processeur et ne calculera pas les multiplications par sommes successives.
Pourquoi ne le faits-tu pas ? A ton avis, quel est le risque majeur
de l'informatique des années 2000 ? Avoir un code non maintenable ou
avoir un code qui rame ?
Le compilo pourrait même la calculer 3*(3*n) fois, c'est à dire la
calculer 3 fois chaque fois qu'il en a besoin, et vérifier que
les 3 valeurs sont les mêmes, et sinon, choisir par un vote.
Mais la norme ne te garantie pas non plus que le compilo ne fera pas
calculer au processeur les statistiques du dernier tierce entre
chaque intruction, ou qu'il utilisera bien l'instruction de multiplication
du processeur et ne calculera pas les multiplications par sommes successives.
Pourquoi ne le faits-tu pas ? A ton avis, quel est le risque majeur
de l'informatique des années 2000 ? Avoir un code non maintenable ou
avoir un code qui rame ?
Le compilo pourrait même la calculer 3*(3*n) fois, c'est à dire la
calculer 3 fois chaque fois qu'il en a besoin, et vérifier que
les 3 valeurs sont les mêmes, et sinon, choisir par un vote.
Mais la norme ne te garantie pas non plus que le compilo ne fera pas
calculer au processeur les statistiques du dernier tierce entre
chaque intruction, ou qu'il utilisera bien l'instruction de multiplication
du processeur et ne calculera pas les multiplications par sommes successives.
Pourquoi ne le faits-tu pas ? A ton avis, quel est le risque majeur
de l'informatique des années 2000 ? Avoir un code non maintenable ou
avoir un code qui rame ?
Le compilo pourrait même la calculer 3*(3*n) fois, c'est à dire la
calculer 3 fois chaque fois qu'il en a besoin, et vérifier que
les 3 valeurs sont les mêmes, et sinon, choisir par un vote.