[tz] localtime.c issue

Alan Barrett apb at cequrux.com
Mon Jul 8 21:49:53 UTC 2013


On Mon, 08 Jul 2013, Paul_Koning at Dell.com wrote:
>> Perhaps this will work without either a compiler warning or potential loss of precision:
>>
>>           seconds = tdays * SECSPERDAY + (time_t)0.5;
>>
>> --apb (Alan Barrett)
>
> I rather doubt it.  Casting 0.5 to an integer type (as time_t 
> is) ends up adding 0 or 1, but not 0.5.

The whole point of adding 0.5 before converting from time_t to 
int_fast32_t is to round up if time_t happens to be a floating 
point type, and to do nothing if time_t happens to be an integral 
type.  You can't assume that time_t is an integral type.

>How about (tdays * SECSPERDAY * 2 + 1) / 2;   ?

Multiplying by 2 might overflow the available range.  (I have not 
checked whether there are reasons why it would always be safe.) 

--apb (Alan Barrett)



More information about the tz mailing list