si je mesure le temps écoulé par :
clock_t start, stop;
[...]
start = clock();
[...]
printf(...);
stop = clock();
elapsed = ((double)stop - start) / CLOCKS_PER_SEC;
printf("Temps écoulé : %fn", elapsed);
j'obtiens :
Temps écoulé : 0.030000
donc 30 ms.
MAIS ce n'est pas du tout ce que je perçois au terminal, au terminal
j'ai "l'impression" que ça dure 2 ou 3 seconde.
donc, est-ce un problème d'unités ?
ou est-ce que sur unix (Mac OS W 10.4.7) le printf et spoolé si bien que
le temps mis à sortir les données au term n'a pas grand chose à voir
avec le temps réel d'éxécution (c'est ce que je pense) ?
question annexe :
j'utilise la constante "CLOCKS_PER_SEC" y en a t'il une autre qui donne
le nombre de "CLOCKS" par ms ou dois-je faire la conversion moi-même (ce
que je pense) ?
j'ai regardé time.h il n'y a QUE :
#define CLOCKS_PER_SEC (__DARWIN_CLK_TCK)
si je mesure le temps écoulé par :
clock_t start, stop;
[...]
start = clock();
[...]
printf(...);
stop = clock();
elapsed = ((double)stop - start) / CLOCKS_PER_SEC;
printf("Temps écoulé : %fn", elapsed);
j'obtiens :
Temps écoulé : 0.030000
donc 30 ms.
MAIS ce n'est pas du tout ce que je perçois au terminal, au terminal
j'ai "l'impression" que ça dure 2 ou 3 seconde.
donc, est-ce un problème d'unités ?
ou est-ce que sur unix (Mac OS W 10.4.7) le printf et spoolé si bien que
le temps mis à sortir les données au term n'a pas grand chose à voir
avec le temps réel d'éxécution (c'est ce que je pense) ?
question annexe :
j'utilise la constante "CLOCKS_PER_SEC" y en a t'il une autre qui donne
le nombre de "CLOCKS" par ms ou dois-je faire la conversion moi-même (ce
que je pense) ?
j'ai regardé time.h il n'y a QUE :
#define CLOCKS_PER_SEC (__DARWIN_CLK_TCK)
si je mesure le temps écoulé par :
clock_t start, stop;
[...]
start = clock();
[...]
printf(...);
stop = clock();
elapsed = ((double)stop - start) / CLOCKS_PER_SEC;
printf("Temps écoulé : %fn", elapsed);
j'obtiens :
Temps écoulé : 0.030000
donc 30 ms.
MAIS ce n'est pas du tout ce que je perçois au terminal, au terminal
j'ai "l'impression" que ça dure 2 ou 3 seconde.
donc, est-ce un problème d'unités ?
ou est-ce que sur unix (Mac OS W 10.4.7) le printf et spoolé si bien que
le temps mis à sortir les données au term n'a pas grand chose à voir
avec le temps réel d'éxécution (c'est ce que je pense) ?
question annexe :
j'utilise la constante "CLOCKS_PER_SEC" y en a t'il une autre qui donne
le nombre de "CLOCKS" par ms ou dois-je faire la conversion moi-même (ce
que je pense) ?
j'ai regardé time.h il n'y a QUE :
#define CLOCKS_PER_SEC (__DARWIN_CLK_TCK)
Vous faites:
.....
clock_t start, stop;
double elapsed;
start = clock();
system("PAUSE");/* A remplacer selon implémentation */
stop = clock();
elapsed = ((double)stop - start) / CLOCKS_PER_SEC;
printf("Temps écoulé : %fn", elapsed);
.....
et vous compter 10 secondes. J'utilise un chronomètre sur mon téléphone
portable. Et vous verrez bien. Chez moi, ça marche correctement
(affiche des secondes).
question annexe :
j'utilise la constante "CLOCKS_PER_SEC" y en a t'il une autre qui donne
le nombre de "CLOCKS" par ms ou dois-je faire la conversion moi-même (ce
que je pense) ?
j'ai regardé time.h il n'y a QUE :
#define CLOCKS_PER_SEC (__DARWIN_CLK_TCK)
La norme ne définit que CLOCKS_PER_SEC dans ce domaine.
ok, c'est bien ce que je sipputais...
Vous faites:
.....
clock_t start, stop;
double elapsed;
start = clock();
system("PAUSE");/* A remplacer selon implémentation */
stop = clock();
elapsed = ((double)stop - start) / CLOCKS_PER_SEC;
printf("Temps écoulé : %fn", elapsed);
.....
et vous compter 10 secondes. J'utilise un chronomètre sur mon téléphone
portable. Et vous verrez bien. Chez moi, ça marche correctement
(affiche des secondes).
question annexe :
j'utilise la constante "CLOCKS_PER_SEC" y en a t'il une autre qui donne
le nombre de "CLOCKS" par ms ou dois-je faire la conversion moi-même (ce
que je pense) ?
j'ai regardé time.h il n'y a QUE :
#define CLOCKS_PER_SEC (__DARWIN_CLK_TCK)
La norme ne définit que CLOCKS_PER_SEC dans ce domaine.
ok, c'est bien ce que je sipputais...
Vous faites:
.....
clock_t start, stop;
double elapsed;
start = clock();
system("PAUSE");/* A remplacer selon implémentation */
stop = clock();
elapsed = ((double)stop - start) / CLOCKS_PER_SEC;
printf("Temps écoulé : %fn", elapsed);
.....
et vous compter 10 secondes. J'utilise un chronomètre sur mon téléphone
portable. Et vous verrez bien. Chez moi, ça marche correctement
(affiche des secondes).
question annexe :
j'utilise la constante "CLOCKS_PER_SEC" y en a t'il une autre qui donne
le nombre de "CLOCKS" par ms ou dois-je faire la conversion moi-même (ce
que je pense) ?
j'ai regardé time.h il n'y a QUE :
#define CLOCKS_PER_SEC (__DARWIN_CLK_TCK)
La norme ne définit que CLOCKS_PER_SEC dans ce domaine.
ok, c'est bien ce que je sipputais...
Vous faites:
.....
clock_t start, stop;
double elapsed;
start = clock();
system("PAUSE");/* A remplacer selon implémentation */
stop = clock();
elapsed = ((double)stop - start) / CLOCKS_PER_SEC;
printf("Temps écoulé : %fn", elapsed);
.....
et vous compter 10 secondes.
Vous faites:
.....
clock_t start, stop;
double elapsed;
start = clock();
system("PAUSE");/* A remplacer selon implémentation */
stop = clock();
elapsed = ((double)stop - start) / CLOCKS_PER_SEC;
printf("Temps écoulé : %fn", elapsed);
.....
et vous compter 10 secondes.
Vous faites:
.....
clock_t start, stop;
double elapsed;
start = clock();
system("PAUSE");/* A remplacer selon implémentation */
stop = clock();
elapsed = ((double)stop - start) / CLOCKS_PER_SEC;
printf("Temps écoulé : %fn", elapsed);
.....
et vous compter 10 secondes.
clock_t start, stop;
[...]
start = clock();
[...]
printf(...);
stop = clock();
elapsed = ((double)stop - start) / CLOCKS_PER_SEC;
printf("Temps écoulé : %fn", elapsed);
j'obtiens :
Temps écoulé : 0.030000
donc 30 ms.
MAIS ce n'est pas du tout ce que je perçois au terminal, au terminal
j'ai "l'impression" que ça dure 2 ou 3 seconde.
donc, est-ce un problème d'unités ?
ou est-ce que sur unix (Mac OS W 10.4.7) le printf et spoolé si bien que
le temps mis à sortir les données au term n'a pas grand chose à voir
avec le temps réel d'éxécution (c'est ce que je pense) ?
clock_t start, stop;
[...]
start = clock();
[...]
printf(...);
stop = clock();
elapsed = ((double)stop - start) / CLOCKS_PER_SEC;
printf("Temps écoulé : %fn", elapsed);
j'obtiens :
Temps écoulé : 0.030000
donc 30 ms.
MAIS ce n'est pas du tout ce que je perçois au terminal, au terminal
j'ai "l'impression" que ça dure 2 ou 3 seconde.
donc, est-ce un problème d'unités ?
ou est-ce que sur unix (Mac OS W 10.4.7) le printf et spoolé si bien que
le temps mis à sortir les données au term n'a pas grand chose à voir
avec le temps réel d'éxécution (c'est ce que je pense) ?
clock_t start, stop;
[...]
start = clock();
[...]
printf(...);
stop = clock();
elapsed = ((double)stop - start) / CLOCKS_PER_SEC;
printf("Temps écoulé : %fn", elapsed);
j'obtiens :
Temps écoulé : 0.030000
donc 30 ms.
MAIS ce n'est pas du tout ce que je perçois au terminal, au terminal
j'ai "l'impression" que ça dure 2 ou 3 seconde.
donc, est-ce un problème d'unités ?
ou est-ce que sur unix (Mac OS W 10.4.7) le printf et spoolé si bien que
le temps mis à sortir les données au term n'a pas grand chose à voir
avec le temps réel d'éxécution (c'est ce que je pense) ?
Si elapsed est un double, il faut l'afficher avec %lf.
j'obtiens :
Temps écoulé : 0.030000
donc 30 ms.
MAIS ce n'est pas du tout ce que je perçois au terminal, au terminal
j'ai "l'impression" que ça dure 2 ou 3 seconde.
donc, est-ce un problème d'unités ?
ou est-ce que sur unix (Mac OS W 10.4.7) le printf et spoolé si bien que
le temps mis à sortir les données au term n'a pas grand chose à voir
avec le temps réel d'éxécution (c'est ce que je pense) ?
Il faut voir aussi que clock() vous retourne le temps processeur
occupé par votre programme, pas le temps écoulé entre ses 2 appels. Pour
ce dernier usage, cf gettimeofday (ou time, peut-être).
Si elapsed est un double, il faut l'afficher avec %lf.
j'obtiens :
Temps écoulé : 0.030000
donc 30 ms.
MAIS ce n'est pas du tout ce que je perçois au terminal, au terminal
j'ai "l'impression" que ça dure 2 ou 3 seconde.
donc, est-ce un problème d'unités ?
ou est-ce que sur unix (Mac OS W 10.4.7) le printf et spoolé si bien que
le temps mis à sortir les données au term n'a pas grand chose à voir
avec le temps réel d'éxécution (c'est ce que je pense) ?
Il faut voir aussi que clock() vous retourne le temps processeur
occupé par votre programme, pas le temps écoulé entre ses 2 appels. Pour
ce dernier usage, cf gettimeofday (ou time, peut-être).
Si elapsed est un double, il faut l'afficher avec %lf.
j'obtiens :
Temps écoulé : 0.030000
donc 30 ms.
MAIS ce n'est pas du tout ce que je perçois au terminal, au terminal
j'ai "l'impression" que ça dure 2 ou 3 seconde.
donc, est-ce un problème d'unités ?
ou est-ce que sur unix (Mac OS W 10.4.7) le printf et spoolé si bien que
le temps mis à sortir les données au term n'a pas grand chose à voir
avec le temps réel d'éxécution (c'est ce que je pense) ?
Il faut voir aussi que clock() vous retourne le temps processeur
occupé par votre programme, pas le temps écoulé entre ses 2 appels. Pour
ce dernier usage, cf gettimeofday (ou time, peut-être).
Stéphane Goujet wrote:Si elapsed est un double, il faut l'afficher avec %lf.
ah bon ?
là gcc ne dit rien du tout et mon petit tableau "C Reference Card
(ANSI)" dit f tout court,
Stéphane Goujet <stephane.goujet@pp.invalid> wrote:
Si elapsed est un double, il faut l'afficher avec %lf.
ah bon ?
là gcc ne dit rien du tout et mon petit tableau "C Reference Card
(ANSI)" dit f tout court,
Stéphane Goujet wrote:Si elapsed est un double, il faut l'afficher avec %lf.
ah bon ?
là gcc ne dit rien du tout et mon petit tableau "C Reference Card
(ANSI)" dit f tout court,
Pierre Maurette wrote:Vous faites:
.....
clock_t start, stop;
double elapsed;
start = clock();
system("PAUSE");/* A remplacer selon implémentation */
stop = clock();
elapsed = ((double)stop - start) / CLOCKS_PER_SEC;
printf("Temps écoulé : %fn", elapsed);
.....
et vous compter 10 secondes.
bon j'ai mis la ligne de pause à :
system("sleep 10");
et j'obtiens bien 10 s de pause
MAIS le résultat est :
Temps écoulé : 0.010000
donc avec un facteur 1000 dans le nez )))
ça ne peut-être qu'un pb au niveau de la ligne :
elapsed = ((double)stop - start) / CLOCKS_PER_SEC;
que je ne comprend pas très bien je dois dire car j'ai :
clock_t start, stop;
double elapsed;
ce que je ne comprends pas c'est le cast :
((double)stop - start)
est-ce qu'il caste la différence de stop - start ou seulement stop ?
j'ai piqué cette ligne sur developpez.
j'ai casté différemment :
elapsed = (double) (stop - start) / (double)CLOCKS_PER_SEC;
ça ne change rien au résultat...
par ailleurs j'ai :
CLOCKS_PER_SEC : 100.000000
mystère et boules de gomme ?
Pierre Maurette <maurettepierre@wanadoo.fr> wrote:
Vous faites:
.....
clock_t start, stop;
double elapsed;
start = clock();
system("PAUSE");/* A remplacer selon implémentation */
stop = clock();
elapsed = ((double)stop - start) / CLOCKS_PER_SEC;
printf("Temps écoulé : %fn", elapsed);
.....
et vous compter 10 secondes.
bon j'ai mis la ligne de pause à :
system("sleep 10");
et j'obtiens bien 10 s de pause
MAIS le résultat est :
Temps écoulé : 0.010000
donc avec un facteur 1000 dans le nez )))
ça ne peut-être qu'un pb au niveau de la ligne :
elapsed = ((double)stop - start) / CLOCKS_PER_SEC;
que je ne comprend pas très bien je dois dire car j'ai :
clock_t start, stop;
double elapsed;
ce que je ne comprends pas c'est le cast :
((double)stop - start)
est-ce qu'il caste la différence de stop - start ou seulement stop ?
j'ai piqué cette ligne sur developpez.
j'ai casté différemment :
elapsed = (double) (stop - start) / (double)CLOCKS_PER_SEC;
ça ne change rien au résultat...
par ailleurs j'ai :
CLOCKS_PER_SEC : 100.000000
mystère et boules de gomme ?
Pierre Maurette wrote:Vous faites:
.....
clock_t start, stop;
double elapsed;
start = clock();
system("PAUSE");/* A remplacer selon implémentation */
stop = clock();
elapsed = ((double)stop - start) / CLOCKS_PER_SEC;
printf("Temps écoulé : %fn", elapsed);
.....
et vous compter 10 secondes.
bon j'ai mis la ligne de pause à :
system("sleep 10");
et j'obtiens bien 10 s de pause
MAIS le résultat est :
Temps écoulé : 0.010000
donc avec un facteur 1000 dans le nez )))
ça ne peut-être qu'un pb au niveau de la ligne :
elapsed = ((double)stop - start) / CLOCKS_PER_SEC;
que je ne comprend pas très bien je dois dire car j'ai :
clock_t start, stop;
double elapsed;
ce que je ne comprends pas c'est le cast :
((double)stop - start)
est-ce qu'il caste la différence de stop - start ou seulement stop ?
j'ai piqué cette ligne sur developpez.
j'ai casté différemment :
elapsed = (double) (stop - start) / (double)CLOCKS_PER_SEC;
ça ne change rien au résultat...
par ailleurs j'ai :
CLOCKS_PER_SEC : 100.000000
mystère et boules de gomme ?
Si elapsed est un double, il faut l'afficher avec %lf.
là gcc ne dit rien du tout et mon petit tableau "C Reference Card
(ANSI)" dit f tout court, lf ne serait-pas pour long double ??? qui
n'existe peut-être pas d'ailleurs )))
mais j'ai mis %lf, gcc ne couine pas et ça donne la même chose au
term...
Si elapsed est un double, il faut l'afficher avec %lf.
là gcc ne dit rien du tout et mon petit tableau "C Reference Card
(ANSI)" dit f tout court, lf ne serait-pas pour long double ??? qui
n'existe peut-être pas d'ailleurs )))
mais j'ai mis %lf, gcc ne couine pas et ça donne la même chose au
term...
Si elapsed est un double, il faut l'afficher avec %lf.
là gcc ne dit rien du tout et mon petit tableau "C Reference Card
(ANSI)" dit f tout court, lf ne serait-pas pour long double ??? qui
n'existe peut-être pas d'ailleurs )))
mais j'ai mis %lf, gcc ne couine pas et ça donne la même chose au
term...
Si elapsed est un double, il faut l'afficher avec %lf.
là gcc ne dit rien du tout et mon petit tableau "C Reference Card
(ANSI)" dit f tout court, lf ne serait-pas pour long double ??? qui
n'existe peut-être pas d'ailleurs )))
mais j'ai mis %lf, gcc ne couine pas et ça donne la même chose au
term...
Effectivement, un l devant un f est ignoré. Et pour un long double, c'est
%Lf.
Mais comment doit-on afficher un float ? Faut-il le convertir en double ?
Si elapsed est un double, il faut l'afficher avec %lf.
là gcc ne dit rien du tout et mon petit tableau "C Reference Card
(ANSI)" dit f tout court, lf ne serait-pas pour long double ??? qui
n'existe peut-être pas d'ailleurs )))
mais j'ai mis %lf, gcc ne couine pas et ça donne la même chose au
term...
Effectivement, un l devant un f est ignoré. Et pour un long double, c'est
%Lf.
Mais comment doit-on afficher un float ? Faut-il le convertir en double ?
Si elapsed est un double, il faut l'afficher avec %lf.
là gcc ne dit rien du tout et mon petit tableau "C Reference Card
(ANSI)" dit f tout court, lf ne serait-pas pour long double ??? qui
n'existe peut-être pas d'ailleurs )))
mais j'ai mis %lf, gcc ne couine pas et ça donne la même chose au
term...
Effectivement, un l devant un f est ignoré. Et pour un long double, c'est
%Lf.
Mais comment doit-on afficher un float ? Faut-il le convertir en double ?
Ça semble en effet étrange, mais je n'ai pas trop regardé. Pas de code
complet, et de toutes façons sur mes diverses implémentations, clock_t
est un type entier. Chez vous, un type flottant très certainement. La
norme ne demande qu'un type arithmétique.
La première chose à faire est de vous procurer la norme:
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf
Ensuite, vous pouvez regarder time.h pour en savoir plus sur clock_t et
CLOCKS_PER_SEC. S'il le faut, vous remontez à d'autres .h pour avoir la
réponse. Il ne s'agit que de curiosité, votre code doit fonctionner
sans cette connaissance.
Ensuite, vous essayez d'affiner pour savoir où ça merde. Sans même
avoir regardé dans les .h, vous pouvez ajouter après le calcul de
elapsed la ligne:
printf("%.0fn%.0fn%.0fn%.2fn%.2fn%.2fn",
(float)start,
(float)stop,
(float)(stop - start),
(float)CLOCKS_PER_SEC,
(float)(stop - start)/CLOCKS_PER_SEC,
elapsed);
(peu importe la pureté du code, c'est pour glaner de l'information).
Ça semble en effet étrange, mais je n'ai pas trop regardé. Pas de code
complet, et de toutes façons sur mes diverses implémentations, clock_t
est un type entier. Chez vous, un type flottant très certainement. La
norme ne demande qu'un type arithmétique.
La première chose à faire est de vous procurer la norme:
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf
Ensuite, vous pouvez regarder time.h pour en savoir plus sur clock_t et
CLOCKS_PER_SEC. S'il le faut, vous remontez à d'autres .h pour avoir la
réponse. Il ne s'agit que de curiosité, votre code doit fonctionner
sans cette connaissance.
Ensuite, vous essayez d'affiner pour savoir où ça merde. Sans même
avoir regardé dans les .h, vous pouvez ajouter après le calcul de
elapsed la ligne:
printf("%.0fn%.0fn%.0fn%.2fn%.2fn%.2fn",
(float)start,
(float)stop,
(float)(stop - start),
(float)CLOCKS_PER_SEC,
(float)(stop - start)/CLOCKS_PER_SEC,
elapsed);
(peu importe la pureté du code, c'est pour glaner de l'information).
Ça semble en effet étrange, mais je n'ai pas trop regardé. Pas de code
complet, et de toutes façons sur mes diverses implémentations, clock_t
est un type entier. Chez vous, un type flottant très certainement. La
norme ne demande qu'un type arithmétique.
La première chose à faire est de vous procurer la norme:
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf
Ensuite, vous pouvez regarder time.h pour en savoir plus sur clock_t et
CLOCKS_PER_SEC. S'il le faut, vous remontez à d'autres .h pour avoir la
réponse. Il ne s'agit que de curiosité, votre code doit fonctionner
sans cette connaissance.
Ensuite, vous essayez d'affiner pour savoir où ça merde. Sans même
avoir regardé dans les .h, vous pouvez ajouter après le calcul de
elapsed la ligne:
printf("%.0fn%.0fn%.0fn%.2fn%.2fn%.2fn",
(float)start,
(float)stop,
(float)(stop - start),
(float)CLOCKS_PER_SEC,
(float)(stop - start)/CLOCKS_PER_SEC,
elapsed);
(peu importe la pureté du code, c'est pour glaner de l'information).