Je me demandais comment suivre l'heure actuelle en C à la plus grande précision possible. En particulier, je me demandais s'il y avait une fonction en C que Mimics Python's Time.Time ()?
J'ai trouvé le code ci-dessous, mais il arrondit les secondes. P>
#include <time.h>
int main() {
time_t seconds;
seconds = time(NULL);
}
3 Réponses :
Si vous utilisez un système compatible Posix, vous pouvez essayer clock_geTime code> fonction. Il renvoie l'heure actuelle dans les nanosecondes. #include <time.h>
#include <stdint.h>
int main() {
struct timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);
int64_t time_ns = ts.tv_sec * 1000000000LL + ts.tv_nsec;
return 0;
}
TSS.TV_SEC * 1000000000 CODE> PANLE DUBLIVE DE REALLILY A 32 bits TIME_T < / code> . Suggérer tts.tv_sec * 1000000000LL code> ou similaire pour assurer au moins une multiplication de 64 bits.
Cela devrait aider:
#include<stdio.h>
#include<time.h>
int main()
{
clock_t t1, t2;
t1 = clock();
float diff = (t1 / 1000000.0F );
printf("%f",diff);
return 0;
}
Ne présumez pas que horloge code> a cette résolution. Utilisez t1 / (float) horlogs_per_sec code>.
Pensée profonde, double code> aurait plus de sens ici. Après tout, OP veut bonne précision i>, donc pas besoin de réduire ce que clock_t code> peut fournir. De plus, comme diff code> pourrait être petit, considérer "% g" code>.
Vous pouvez utiliser la fonction Il retournera le nombre d'horloges écoulées depuis un cadre de référence (qui est défini la mise en œuvre, mais elle est liée à l'exécution du programme). P> horloge code> de time.h code> pour mesurer le temps avec une précision extrême. double secs = now / CLOCKS_PER_SEC; // Result in seconds
double msecs = secs * 1000; // Result in milliseconds
Vous avez besoin d'un casting double secs = (double) maintenant / horlogs_per_sec; code> ainsi que sur certains systèmes, vous n'obtenez pas la résolution de millisecond à partir de horloge () code>.
@Weathervane dans la pratique, (double) maintenant code> est ok, mais cela pourrait réduire la précision de clock_t code>. Une alternative plus douce est double secs = 1,0 * maintenant / horlogs_per_sec; code> pour permettre à la division de se produire à la meilleure précision.
@ Restauration de chux Monica ou Double Secs = / (Double) Clocks_per_sec; Code> Semblable à une autre réponse. Bien que clock_t code> s la précision n'est pas si géniale.
@Weathervane vrai en général. Pourtant, clock_t code> et time_t code> ne sont spécifiés que comme un scalaire. C'est à ce jour que les couts peuvent non seulement élargir un type, parfois ils seront étroits, alors j'essaie de les éviter à moins que aucune autre bonne solution n'existe. IAC, votre point sur la faiblesse de maintenant / horlogs_per_sec; code> reste valide.