round() lround() #19

Closed
opened 2026-01-29 22:23:20 +00:00 by claunia · 3 comments
Owner

Originally created by @SilvanScherrer on GitHub (Jan 29, 2020).

Originally assigned to: @dmik on GitHub.

round() and lround() are not members of std namespace. I faced some ports which want them in the std namespace. So I guess (nope I didn't a research) it's wrong.

Originally created by @SilvanScherrer on GitHub (Jan 29, 2020). Originally assigned to: @dmik on GitHub. round() and lround() are not members of std namespace. I faced some ports which want them in the std namespace. So I guess (nope I didn't a research) it's wrong.
Author
Owner

@dmik commented on GitHub (Mar 16, 2020):

Note that there is an old ticket, which I'm closing in favor of this one: https://github.com/psmedley/gcc/issues/34. It, however, contains useful information which should be carefully inspected while doing this task.

@dmik commented on GitHub (Mar 16, 2020): Note that there is an old ticket, which I'm closing in favor of this one: https://github.com/psmedley/gcc/issues/34. It, however, contains useful information which should be carefully inspected while doing this task.
Author
Owner

@dmik commented on GitHub (Mar 16, 2020):

_GLIBCXX_USE_C99_MATH_TR1 is not defined in c++config.h because the following configure test:

#include <math.h>
int
main ()
{
typedef double_t  my_double_t;
		  typedef float_t   my_float_t;
		  acosh(0.0);
		  acoshf(0.0f);
		  acoshl(0.0l);
		  asinh(0.0);
		  asinhf(0.0f);
		  asinhl(0.0l);
		  atanh(0.0);
		  atanhf(0.0f);
		  atanhl(0.0l);
		  cbrt(0.0);
		  cbrtf(0.0f);
		  cbrtl(0.0l);
		  copysign(0.0, 0.0);
		  copysignf(0.0f, 0.0f);
		  copysignl(0.0l, 0.0l);
		  erf(0.0);
		  erff(0.0f);
		  erfl(0.0l);
		  erfc(0.0);
		  erfcf(0.0f);
		  erfcl(0.0l);
		  exp2(0.0);
		  exp2f(0.0f);
		  exp2l(0.0l);
		  expm1(0.0);
		  expm1f(0.0f);
		  expm1l(0.0l);
		  fdim(0.0, 0.0);
		  fdimf(0.0f, 0.0f);
		  fdiml(0.0l, 0.0l);
		  fma(0.0, 0.0, 0.0);
		  fmaf(0.0f, 0.0f, 0.0f);
		  fmal(0.0l, 0.0l, 0.0l);
		  fmax(0.0, 0.0);
		  fmaxf(0.0f, 0.0f);
		  fmaxl(0.0l, 0.0l);
		  fmin(0.0, 0.0);
		  fminf(0.0f, 0.0f);
		  fminl(0.0l, 0.0l);
		  hypot(0.0, 0.0);
		  hypotf(0.0f, 0.0f);
		  hypotl(0.0l, 0.0l);
		  ilogb(0.0);
		  ilogbf(0.0f);
		  ilogbl(0.0l);
		  lgamma(0.0);
		  lgammaf(0.0f);
		  lgammal(0.0l);
		  #ifndef __APPLE__ /* see below */
		  llrint(0.0);
		  llrintf(0.0f);
		  llrintl(0.0l);
		  llround(0.0);
		  llroundf(0.0f);
		  llroundl(0.0l);
		  #endif
		  log1p(0.0);
		  log1pf(0.0f);
		  log1pl(0.0l);
		  log2(0.0);
		  log2f(0.0f);
		  log2l(0.0l);
		  logb(0.0);
		  logbf(0.0f);
		  logbl(0.0l);
		  lrint(0.0);
		  lrintf(0.0f);
		  lrintl(0.0l);
		  lround(0.0);
		  lroundf(0.0f);
		  lroundl(0.0l);
		  nan(0);
		  nanf(0);
		  nanl(0);
		  nearbyint(0.0);
		  nearbyintf(0.0f);
		  nearbyintl(0.0l);
		  nextafter(0.0, 0.0);
		  nextafterf(0.0f, 0.0f);
		  nextafterl(0.0l, 0.0l);
		  nexttoward(0.0, 0.0);
		  nexttowardf(0.0f, 0.0f);
		  nexttowardl(0.0l, 0.0l);
		  remainder(0.0, 0.0);
		  remainderf(0.0f, 0.0f);
		  remainderl(0.0l, 0.0l);
		  remquo(0.0, 0.0, 0);
		  remquof(0.0f, 0.0f, 0);
		  remquol(0.0l, 0.0l, 0);
		  rint(0.0);
		  rintf(0.0f);
		  rintl(0.0l);
		  round(0.0);
		  roundf(0.0f);
		  roundl(0.0l);
		  scalbln(0.0, 0l);
		  scalblnf(0.0f, 0l);
		  scalblnl(0.0l, 0l);
		  scalbn(0.0, 0);
		  scalbnf(0.0f, 0);
		  scalbnl(0.0l, 0);
		  tgamma(0.0);
		  tgammaf(0.0f);
		  tgammal(0.0l);
		  trunc(0.0);
		  truncf(0.0f);
		  truncl(0.0l);

  ;
  return 0;
}

fails as follows:

conftest.cpp: In function 'int main()':
conftest.cpp:66:5: error: 'log2' was not declared in this scope; did you mean 'logl'?
   66 |     log2(0.0);
      |     ^~~~
      |     logl
conftest.cpp:67:5: error: 'log2f' was not declared in this scope; did you mean 'logf'?
   67 |     log2f(0.0f);
      |     ^~~~~
      |     logf
conftest.cpp:109:5: error: 'tgammaf' was not declared in this scope; did you mean 'tgammal'?
  109 |     tgammaf(0.0f);
      |     ^~~~~~~
      |     tgammal
@dmik commented on GitHub (Mar 16, 2020): _GLIBCXX_USE_C99_MATH_TR1 is not defined in `c++config.h` because the following configure test: ```c++ #include <math.h> int main () { typedef double_t my_double_t; typedef float_t my_float_t; acosh(0.0); acoshf(0.0f); acoshl(0.0l); asinh(0.0); asinhf(0.0f); asinhl(0.0l); atanh(0.0); atanhf(0.0f); atanhl(0.0l); cbrt(0.0); cbrtf(0.0f); cbrtl(0.0l); copysign(0.0, 0.0); copysignf(0.0f, 0.0f); copysignl(0.0l, 0.0l); erf(0.0); erff(0.0f); erfl(0.0l); erfc(0.0); erfcf(0.0f); erfcl(0.0l); exp2(0.0); exp2f(0.0f); exp2l(0.0l); expm1(0.0); expm1f(0.0f); expm1l(0.0l); fdim(0.0, 0.0); fdimf(0.0f, 0.0f); fdiml(0.0l, 0.0l); fma(0.0, 0.0, 0.0); fmaf(0.0f, 0.0f, 0.0f); fmal(0.0l, 0.0l, 0.0l); fmax(0.0, 0.0); fmaxf(0.0f, 0.0f); fmaxl(0.0l, 0.0l); fmin(0.0, 0.0); fminf(0.0f, 0.0f); fminl(0.0l, 0.0l); hypot(0.0, 0.0); hypotf(0.0f, 0.0f); hypotl(0.0l, 0.0l); ilogb(0.0); ilogbf(0.0f); ilogbl(0.0l); lgamma(0.0); lgammaf(0.0f); lgammal(0.0l); #ifndef __APPLE__ /* see below */ llrint(0.0); llrintf(0.0f); llrintl(0.0l); llround(0.0); llroundf(0.0f); llroundl(0.0l); #endif log1p(0.0); log1pf(0.0f); log1pl(0.0l); log2(0.0); log2f(0.0f); log2l(0.0l); logb(0.0); logbf(0.0f); logbl(0.0l); lrint(0.0); lrintf(0.0f); lrintl(0.0l); lround(0.0); lroundf(0.0f); lroundl(0.0l); nan(0); nanf(0); nanl(0); nearbyint(0.0); nearbyintf(0.0f); nearbyintl(0.0l); nextafter(0.0, 0.0); nextafterf(0.0f, 0.0f); nextafterl(0.0l, 0.0l); nexttoward(0.0, 0.0); nexttowardf(0.0f, 0.0f); nexttowardl(0.0l, 0.0l); remainder(0.0, 0.0); remainderf(0.0f, 0.0f); remainderl(0.0l, 0.0l); remquo(0.0, 0.0, 0); remquof(0.0f, 0.0f, 0); remquol(0.0l, 0.0l, 0); rint(0.0); rintf(0.0f); rintl(0.0l); round(0.0); roundf(0.0f); roundl(0.0l); scalbln(0.0, 0l); scalblnf(0.0f, 0l); scalblnl(0.0l, 0l); scalbn(0.0, 0); scalbnf(0.0f, 0); scalbnl(0.0l, 0); tgamma(0.0); tgammaf(0.0f); tgammal(0.0l); trunc(0.0); truncf(0.0f); truncl(0.0l); ; return 0; } ``` fails as follows: ``` conftest.cpp: In function 'int main()': conftest.cpp:66:5: error: 'log2' was not declared in this scope; did you mean 'logl'? 66 | log2(0.0); | ^~~~ | logl conftest.cpp:67:5: error: 'log2f' was not declared in this scope; did you mean 'logf'? 67 | log2f(0.0f); | ^~~~~ | logf conftest.cpp:109:5: error: 'tgammaf' was not declared in this scope; did you mean 'tgammal'? 109 | tgammaf(0.0f); | ^~~~~~~ | tgammal ```
Author
Owner

@dmik commented on GitHub (Mar 16, 2020):

As with other C stuff, these functions are in the ISO standard since long, see e.g. https://pubs.opengroup.org/onlinepubs/009695399/functions/log2.html. On OS/2 they are still a GNU C extension.

I will take updates from FreeBSD, as usual: https://github.com/freebsd/freebsd/blob/master/lib/msun/src/math.h

@dmik commented on GitHub (Mar 16, 2020): As with other C stuff, these functions are in the ISO standard since long, see e.g. https://pubs.opengroup.org/onlinepubs/009695399/functions/log2.html. On OS/2 they are still a GNU C extension. I will take updates from FreeBSD, as usual: https://github.com/freebsd/freebsd/blob/master/lib/msun/src/math.h
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: bitwiseworks/gcc-os2#19