Bonjour,
Je ne m’explique pas le comportement/bug suivant:
Lorsque ma variable est float
le temps ne s’incrémente pas, mais avec double
si. Pourquoi?
#include <stdio.h> // printf
#include <stdlib.h> // NULL
#include <sys/time.h> // gettimeofday
#include <unistd.h> // usleep
void go(void)
{
struct timeval tv;
if (gettimeofday(&tv, NULL) != 0)
{
printf("gettimeofday() error\n");
return;
}
float t_f = tv.tv_sec;
double t_d = tv.tv_sec;
printf("f=%f\n", t_f);
printf("d=%f\n", t_d);
printf("\n");
}
int main(void)
{
go();
usleep(1.5*1000*1000);
go();
return 0;
}
Compilation (centos 7.7.1908 / gcc version 4.8.5 20150623 (Red Hat 4.8.5–39)):
# pour les besoins du projet, je compile en 32 bits, mais en 64 le résultat est le même
$ gcc go.c -Wall -Wextra -m32
Résulat:
$ ./a.out
f=1579515904.000000
d=1579515940.000000
f=1579515904.000000 // meme valeur, wtf
d=1579515941.000000 // +1 sec, tout va bien
Merci d’avance pour votre aide.
(PS: Y’a plus d’IRC sans creation de compte? Smoothirc est mouru, et Freenode et Matrix nécessitent tous les deux un email…)
+0
-0