On 07.10.22 16:38, Tom Lane wrote:
> Peter Eisentraut <peter@eisentraut.org> writes:
>> Remove unnecessary uses of Abs()
>
> Re-reading this, I noticed something that's probably not good:
> in ecpg/pgtypeslib/interval.c you did
>
> - sprintf(cp, "%02d.%0*d", abs(sec), precision, (int) Abs(fsec));
> + sprintf(cp, "%02d.%0*d", abs(sec), precision, abs(fsec));
>
> (in 2 places). I think this has possibly broken the direction of rounding
> for negative values, because we'll now truncate to integer before changing
> sign. Maybe it's okay but you have to make assumptions about what it'll
> do. Safer would have been
>
> + sprintf(cp, "%02d.%0*d", abs(sec), precision, (int) fabs(fsec));
fsec is of type fsec_t, which is int32. So these expressions are
integer all the way through.
> There is similar-looking coding in remove_gene(), but I didn't check
> the data type involved.
There, the type "Gene" is int, so also no floats involved AFAICT.