[cfp-interest 3542] use of reserved exp in frexp*, ldexp* and scalbn* prototypes

Vincent Lefevre vincent at vinc17.net
Wed Jul 2 00:50:28 PDT 2025


In ISO C23 and still in the N3550 C2y draft, B.11 (<math.h>)
and H.11.3p1:

_FloatN frexpfN(_FloatN value, int *exp);
_FloatNx frexpfNx(_FloatNx value, int *exp);
_DecimalN frexpdN(_DecimalN value, int *exp);
_DecimalNx frexpdNx(_DecimalNx value, int *exp);

and

_FloatN ldexpfN(_FloatN value, int exp);
_FloatNx ldexpfNx(_FloatNx value, int exp);
_DecimalN ldexpdN(_DecimalN value, int exp);
_DecimalNx ldexpdNx(_DecimalNx value, int exp);

and

_FloatN scalbnfN(_FloatN value, int exp);
_FloatNx scalbnfNx(_FloatNx value, int exp);
_DecimalN scalbndN(_DecimalN value, int exp);
_DecimalNx scalbndNx(_DecimalNx value, int exp);
_FloatN scalblnfN(_FloatN value, long int exp);
_FloatNx scalblnfNx(_FloatNx value, long int exp);
_DecimalN scalblndN(_DecimalN value, long int exp);
_DecimalNx scalblndNx(_DecimalNx value, long int exp);

However, exp is a standard library function, thus the exp identifier
is reserved for any use. So the above prototypes are incorrect.

Earlier, one has:

double frexp(double value, int *p);
float frexpf(float value, int *p);
long double frexpl(long double value, int *p);

double ldexp(double x, int p);
float ldexpf(float x, int p);
long double ldexpl(long double x, int p);

double scalbn(double x, int n);
float scalbnf(float x, int n);
long double scalbnl(long double x, int n);
double scalbln(double x, long int n);
float scalblnf(float x, long int n);
long double scalblnl(long double x, long int n);

So, for consistency, p and n could be used respectively,
instead of exp.

H.11.3p2 and H.11.3p3 would also need to be updated.

Also in F.10.4.9:

"On a binary system, ldexp(x, exp) is equivalent to scalbn(x, exp)."

BTW, there is a similar issue in 7.17.7.5p7, which contains the
following example:

  exp = atomic_load(&cur);
  do {
        des = function(exp);
  } while (!atomic_compare_exchange_weak(&cur, &exp, des));

-- 
Vincent Lefèvre <vincent at vinc17.net> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / Pascaline project (LIP, ENS-Lyon)


More information about the cfp-interest mailing list