Ваш вывод нарушен. Вы фактически пишете значение d
дважды в следующем коде:
nsec=d-(double)((time_t)d); // Extract fractional part as time_t always whole no.
printf("d = %lf\n",d);
printf("t = %u, nsec = %f\n",d,nsec);
Если бы вы написали это:
nsec=d-(double)((time_t)d); // Extract fractional part as time_t always whole no.
printf("d = %lf\n",d);
printf("t = %u, nsec = %f\n",t,nsec);
Тогда вы получите:
d = 1.500000
t = 1, nsec = 0.000000
Теперь стало понятнее, что у вас есть ошибка округления. В этом случае вы отбрасываете все десятичные разряды, присваивая 0,5 nsec
, long
. Вместо этого nsec
a float
.