Problème avec clock() - C - Programmation
Marsh Posté le 24-12-2004 à 03:58:06
1) clock() renvoit 0 car ton programme a tourné trop vite pour prendre des clock ticks
2) ((double)(fin - debut)) / CLOCKS_PER_SEC
Il me semble que ce qu'il te faut c'est plus getrusage().
Marsh Posté le 29-12-2004 à 19:38:37
Quelle est la valeur sur ton système de "CLOCKS_PER_SEC" ?
C'est ton problème principal. Dans beaucoup d'implémentation, la résolution de "clock()" est trop faible pour chronométrer des durées inférieures à la milli-seconde. Deux soluces :
- Chronométrer N itérations du [... bout de code qu'il faut "statté" ...] : faire une boucle "for(i=0; i < N; i++)" et diviser la durée par N pour connaître la durée d'une seule boucle. C'est la soluce la plus simple mais pas toujours faisable en fonction du fameux "bout de code".
- Trouver une fonction plus précise, mais ça va dépendre de ton système. Sous Windows, par exemple, on trouve de chronos qui descendent jusqu'à la micro-seconde.
Marsh Posté le 29-12-2004 à 21:50:23
CLOCKS_PER_SEC vaut toujours 1000000 (c'est imposé pas POSIX) et n'a rien à voir avec la résolution effective de clock() sur ta machine.
Marsh Posté le 30-12-2004 à 00:35:40
matafan a écrit : CLOCKS_PER_SEC vaut toujours 1000000 (c'est imposé pas POSIX) et n'a rien à voir avec la résolution effective de clock() sur ta machine. |
La norme du langage C n'impose rien. POSIX.1 fait ce qu'il veut... POSIX.1 n'est pas le C...
Marsh Posté le 03-01-2005 à 15:27:22
Euh, juste pour la p'tite histoire, je connais deux implémentation avec 18.2(!) et 1000.0.
Marsh Posté le 23-12-2004 à 23:35:34
Bonjour !
Voilà j'ai besoin de clock() pour mesurer le temps mis par un certain bout de code.
Je met bien l'entete nécéssare (time.h), je déclare deux var :
clock_t debut;
clock_t fin;
Puis :
La compil se fait sans aucune erreur, même avec -Wall
Et quand je lance, j'ai ce resultat :
"Temps mis : 0.0000000"
Quand je débug mon programme avec ddd, et bien debut prend comme valeur 0 apres clock(), et pareil pour fin. Ce qui est bizarre, c'est que un strace me donne ca :
times({tms_utime=0, tms_stime=0, tms_cutime=0, tms_cstime=0}) = 431749080
Donc preuve que ca doit bien marcher, que y'a un réel probleme !!!
Si vous pouvez m'aider, merci par avance.