Обсуждение: pgsql: Remove unnecessary uses of Abs()

Поиск
Список
Период
Сортировка

pgsql: Remove unnecessary uses of Abs()

От
Peter Eisentraut
Дата:
Remove unnecessary uses of Abs()

Use C standard abs() or fabs() instead.

Reviewed-by: Zhang Mingli <zmlpostgres@gmail.com>
Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://www.postgresql.org/message-id/flat/4beb42b5-216b-bce8-d452-d924d5794c63%40enterprisedb.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/f14aad5169baa5e2ac25d49f1d18f9d5cb3bc7f2

Modified Files
--------------
contrib/btree_gist/btree_date.c           |  4 ++--
contrib/btree_gist/btree_float8.c         |  4 ++--
contrib/btree_gist/btree_int2.c           |  2 +-
contrib/btree_gist/btree_int4.c           |  2 +-
contrib/btree_gist/btree_interval.c       |  2 +-
contrib/btree_gist/btree_time.c           |  2 +-
contrib/btree_gist/btree_ts.c             |  2 +-
contrib/btree_gist/btree_utils_num.h      |  2 +-
contrib/btree_gist/btree_utils_var.c      |  2 +-
contrib/cube/cube.c                       |  2 +-
contrib/intarray/_int_gist.c              |  3 ++-
contrib/intarray/_intbig_gist.c           |  4 +++-
contrib/ltree/_ltree_gist.c               |  4 +++-
contrib/seg/seg.c                         |  4 ++--
src/backend/access/gist/gistproc.c        |  4 ++--
src/backend/optimizer/geqo/geqo_erx.c     |  8 ++++----
src/backend/partitioning/partbounds.c     |  4 ++--
src/backend/utils/adt/datetime.c          |  8 ++++----
src/backend/utils/adt/numeric.c           | 20 ++++++++++----------
src/backend/utils/adt/rangetypes_gist.c   |  4 ++--
src/backend/utils/adt/selfuncs.c          |  2 +-
src/backend/utils/adt/timestamp.c         |  4 ++--
src/backend/utils/adt/tsgistidx.c         |  2 +-
src/backend/utils/adt/tsrank.c            |  2 +-
src/backend/utils/misc/guc.c              |  2 +-
src/interfaces/ecpg/pgtypeslib/interval.c |  4 ++--
26 files changed, 54 insertions(+), 49 deletions(-)


Re: pgsql: Remove unnecessary uses of Abs()

От
Tom Lane
Дата:
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));

There is similar-looking coding in remove_gene(), but I didn't check
the data type involved.

            regards, tom lane



Re: pgsql: Remove unnecessary uses of Abs()

От
Peter Eisentraut
Дата:
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.




Re: pgsql: Remove unnecessary uses of Abs()

От
Tom Lane
Дата:
Peter Eisentraut <peter.eisentraut@enterprisedb.com> writes:
> fsec is of type fsec_t, which is int32.  So these expressions are 
> integer all the way through.

Ah, okay.  My instincts were leftover from a time when it could
have been float8.  Sorry for the noise.

            regards, tom lane