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)
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) ?
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. Mais quel serait l'intérêt ? Donner "par seconde" est plus précis. Après, vous pouvez faire: #define CLOCKS_PER_MILLISEC (CLOCKS_PER_SEC / 1000) ou #define FDCLOCKS_PER_MILLISEC ((double)CLOCKS_PER_SEC / 1000)
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) ?
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. Mais quel
serait l'intérêt ? Donner "par seconde" est plus précis. Après, vous
pouvez faire:
#define CLOCKS_PER_MILLISEC (CLOCKS_PER_SEC / 1000)
ou
#define FDCLOCKS_PER_MILLISEC ((double)CLOCKS_PER_SEC / 1000)
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) ?
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. Mais quel serait l'intérêt ? Donner "par seconde" est plus précis. Après, vous pouvez faire: #define CLOCKS_PER_MILLISEC (CLOCKS_PER_SEC / 1000) ou #define FDCLOCKS_PER_MILLISEC ((double)CLOCKS_PER_SEC / 1000)
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).
Ah mais je ne dis pas que ça ne marche pas, ce qu'il y a c'est qu'entre mon "start = clock();" et mon "stop = clock();" il y a un printf dans une boucle qui sort 689 lignes et, il me semble, que tout se passe comme si les 689 printf étaient mis dans un buffer qui se débrouille tout seul et donc que le temps total d'éxécution n'est pas le temps "percu" au terminal.
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...
-- une bévue
Pierre Maurette <maurettepierre@wanadoo.fr> wrote:
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).
Ah mais je ne dis pas que ça ne marche pas, ce qu'il y a c'est qu'entre
mon "start = clock();" et mon "stop = clock();" il y a un printf dans
une boucle qui sort 689 lignes et, il me semble, que tout se passe comme
si les 689 printf étaient mis dans un buffer qui se débrouille tout seul
et donc que le temps total d'éxécution n'est pas le temps "percu" au
terminal.
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...
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).
Ah mais je ne dis pas que ça ne marche pas, ce qu'il y a c'est qu'entre mon "start = clock();" et mon "stop = clock();" il y a un printf dans une boucle qui sort 689 lignes et, il me semble, que tout se passe comme si les 689 printf étaient mis dans un buffer qui se débrouille tout seul et donc que le temps total d'éxécution n'est pas le temps "percu" au terminal.
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...
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).
A+, Stéphane.
pere.noel
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, 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...
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).
ah d'accord, et par exemple alors, quand je fais un printf c'est en qqsorte du temps en *** dehors *** du prog ? ie un autre process s'occupe de ça (je pense que oui sous *nix)...
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, 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...
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).
ah d'accord, et par exemple alors, quand je fais un printf c'est en
qqsorte du temps en *** dehors *** du prog ? ie un autre process
s'occupe de ça (je pense que oui sous *nix)...
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, 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...
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).
ah d'accord, et par exemple alors, quand je fais un printf c'est en qqsorte du temps en *** dehors *** du prog ? ie un autre process s'occupe de ça (je pense que oui sous *nix)...
j'essaire avec time, date ou equivalent.
merci, j'ai pigé qqc ! -- une bévue
Stéphane Goujet
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,
Heu, oui, tiens, je viens de jeter un oeil à une page de manuel de printf et je suis tout confus maintenant. Il est probable que j'aie dit une ânerie. Mais d'où l'ai-je sortie ?
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,
Heu, oui, tiens, je viens de jeter un oeil à une page de manuel de
printf et je suis tout confus maintenant. Il est probable que j'aie dit
une ânerie. Mais d'où l'ai-je sortie ?
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,
Heu, oui, tiens, je viens de jeter un oeil à une page de manuel de printf et je suis tout confus maintenant. Il est probable que j'aie dit une ânerie. Mais d'où l'ai-je sortie ?
Ç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).
-- Pierre Maurette
Pierre Maurette <maurettepierre@wanadoo.fr> wrote:
Ç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).
-- Pierre Maurette
Stéphane Goujet
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+, Stéphane.
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+, Stéphane.
Jean-Marc Bourguet
Stéphane Goujet writes:
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 ?
printf est une fonction variadique. Donc ses arguments sont promus. Et les float sont promus en double (tout comme les char et les shorts sont promus en int).
A+
-- Jean-Marc FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc Site de usenet-fr: http://www.usenet-fr.news.eu.org
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 ?
printf est une fonction variadique. Donc ses arguments sont promus. Et
les float sont promus en double (tout comme les char et les shorts sont
promus en int).
A+
--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org
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 ?
printf est une fonction variadique. Donc ses arguments sont promus. Et les float sont promus en double (tout comme les char et les shorts sont promus en int).
A+
-- Jean-Marc FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc Site de usenet-fr: http://www.usenet-fr.news.eu.org
pere.noel
Pierre Maurette wrote:
Ç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
OK, merci pour la ref, je commence à regarder, le premier truc que je lis :
2 The clock function determines the processor time used. ^^^^^^^^^^^^^^^^^^^^^^^
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).
mon code qui ne fait fait que "sleep 10" donc à la montre c'est aprox bien 10 s :
je pense que le "CLOCKS_PER_SEC" = 100 est bon (Eric Levenez m'en a touché deux mots sur un autre fil).
ils sont curieux ces floats à 6, exactement...
bon MAIS un sleep 10 n'occupe pas le proc pendant 10s, heureusement d'ailleurs...
j'imagine que le process est suspendu et réveillé au bout de 10 s, 'où un temps nul.
j'imagine AUSSI que c'est la même chose pour printf, le process file le job à un process-fils, non ? (j'ai obervé, en utilisant le terminal, que les print-out se mélangeait qqfois les pinceaux je veux dire que si l'on fait un long print-out, les print-out d'erreur peuvent s'y retrouver au milieu même si les erreurs viennent d'un endroit qui n'a rien à voir avec le print-out)
ça me paraît logique. -- une bévue
Pierre Maurette <maurettepierre@wanadoo.fr> wrote:
Ç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
OK, merci pour la ref, je commence à regarder, le premier truc que je
lis :
2 The clock function determines the processor time used.
^^^^^^^^^^^^^^^^^^^^^^^
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).
mon code qui ne fait fait que "sleep 10" donc à la montre c'est aprox
bien 10 s :
je pense que le "CLOCKS_PER_SEC" = 100 est bon (Eric Levenez m'en a
touché deux mots sur un autre fil).
ils sont curieux ces floats à 6, exactement...
bon MAIS un sleep 10 n'occupe pas le proc pendant 10s, heureusement
d'ailleurs...
j'imagine que le process est suspendu et réveillé au bout de 10 s, 'où
un temps nul.
j'imagine AUSSI que c'est la même chose pour printf, le process file le
job à un process-fils, non ?
(j'ai obervé, en utilisant le terminal, que les print-out se mélangeait
qqfois les pinceaux je veux dire que si l'on fait un long print-out, les
print-out d'erreur peuvent s'y retrouver au milieu même si les erreurs
viennent d'un endroit qui n'a rien à voir avec le print-out)
Ç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
OK, merci pour la ref, je commence à regarder, le premier truc que je lis :
2 The clock function determines the processor time used. ^^^^^^^^^^^^^^^^^^^^^^^
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).
mon code qui ne fait fait que "sleep 10" donc à la montre c'est aprox bien 10 s :
je pense que le "CLOCKS_PER_SEC" = 100 est bon (Eric Levenez m'en a touché deux mots sur un autre fil).
ils sont curieux ces floats à 6, exactement...
bon MAIS un sleep 10 n'occupe pas le proc pendant 10s, heureusement d'ailleurs...
j'imagine que le process est suspendu et réveillé au bout de 10 s, 'où un temps nul.
j'imagine AUSSI que c'est la même chose pour printf, le process file le job à un process-fils, non ? (j'ai obervé, en utilisant le terminal, que les print-out se mélangeait qqfois les pinceaux je veux dire que si l'on fait un long print-out, les print-out d'erreur peuvent s'y retrouver au milieu même si les erreurs viennent d'un endroit qui n'a rien à voir avec le print-out)