Re: get rid of Abs()

Zhang Mingli <zmlpostgres@gmail.com>

From: Zhang Mingli <zmlpostgres@gmail.com>
To: pgsql-hackers <pgsql-hackers@postgresql.org>, Peter Eisentraut <peter.eisentraut@enterprisedb.com>
Date: 2022-10-04T09:04:08Z
Lists: pgsql-hackers

Attachments

Hi,

On Oct 4, 2022, 15:07 +0800, Peter Eisentraut <peter.eisentraut@enterprisedb.com>, wrote:
> I was wondering why we have a definition of Abs() in c.h when there are
> more standard functions such as abs() and fabs() in widespread use. I
> think this one is left over from pre-ANSI-C days. The attached patches
> replace all uses of Abs() with more standard functions.
>
> The first patch installs uses of abs() and fabs(). These are already in
> use in the tree and should be straightforward.
>
> The next two patches install uses of llabs() and fabsf(), which are not
> in use yet. But they are in C99.
>
> The last patch removes the definition of Abs().
>
>
> Fun fact: The current definition
>
> #define Abs(x) ((x) >= 0 ? (x) : -(x))
>
> is slightly wrong for floating-point values. Abs(-0.0) returns -0.0,
> but fabs(-0.0) returns +0.0.
+1,

Like patch3, also found some places where could use fabsf instead of fabs if possible, add a patch to replace them.

Regards,
Zhang Mingli

Commits

  1. Remove Abs()

  2. Use C library functions instead of Abs() for int64

  3. Use fabsf() instead of Abs() or fabs() where appropriate

  4. Remove unnecessary uses of Abs()