LOGB(3P)

πŸ¦‹ LOGB(3P) πŸ¦‹

okay bestie, gather round, because today we're decoding logb from the POSIX Programmer's Manual and honestly? it's giving math-girlie main character energy πŸ’…βœ¨

🌸 PROLOG 🌸

So like, real talk first: this manual page is part of the POSIX Programmer's Manual. The Linux implementation of this interface may differ β€” so if you're on Linux, go check the corresponding Linux manual page for the tea on Linux behavior πŸ«–. Or, plot twist, the interface might not even be implemented on Linux at all. rude, honestly. πŸ’€


✨ NAME ✨

logb, logbf, logbl β€” radix-independent exponent πŸ‘‘

πŸŽ€ SYNOPSIS πŸŽ€

#include <math.h>

double logb(double x);
float logbf(float x);
long double logbl(long double x);

three siblings, three flavors of float, one job. we love a coordinated family moment 🫢

πŸ’– DESCRIPTION πŸ’–

The functionality described on this reference page is aligned with the ISO C standard. And no cap β€” any conflict between the requirements described here and the ISO C standard is unintentional. This volume of POSIX.1‐2017 defers to the ISO C standard, periodt. πŸ“œ

These functions shall compute the exponent of x, which is the integral part of log<sub>r</sub> |x|, as a signed floating-point value, for non-zero x, where r is the radix of the machine's floating-point arithmetic, which is the value of FLT_RADIX defined in the <float.h> header. like, it's the exponent but radix-independent so it doesn't care what base your machine is feeling today 🌈

If x is subnormal it is treated as though it were normalized; thus for finite positive x:

1 <= x * FLT_RADIX-logb(x) < FLT_RADIX

Now here's the part where you gotta be a little extra careful, bestie. An application wishing to check for error situations should set errno to zero and call feclearexcept(FE_ALL_EXCEPT) before calling these functions. On return, if errno is non-zero or fetestexcept(FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW) is non-zero, an error has occurred. so like, clean slate before, vibe check after 🧼✨

πŸ”₯ RETURN VALUE πŸ”₯

Upon successful completion, these functions shall return the exponent of x. slay.

If x is ±0, logb(), logbf(), and logbl() shall return -HUGE_VAL, -HUGE_VALF, and -HUGE_VALL, respectively. yeah that's a whole lotta negative huge, not a vibe 😭

On systems that support the IEC 60559 Floating-Point option, a pole error shall occur; otherwise, a pole error may occur.

If x is NaN, a NaN shall be returned. (NaN in, NaN out, iconic behavior honestly πŸ’€)

If x is ±Inf, +Inf shall be returned. ⭐

πŸ’œ ERRORS πŸ’œ

These functions shall fail if:

  • Pole Error β€” The value of x is Β±0.

If the integer expression (math_errhandling & MATH_ERRNO) is non-zero, then errno shall be set to [ERANGE]. If the integer expression (math_errhandling & MATH_ERREXCEPT) is non-zero, then the divide-by-zero floating-point exception shall be raised. 🚨

These functions may fail if:

  • Pole Error β€” The value of x is 0.

If the integer expression (math_errhandling & MATH_ERRNO) is non-zero, then errno shall be set to [ERANGE]. If the integer expression (math_errhandling & MATH_ERREXCEPT) is non-zero, then the divide-by-zero floating-point exception shall be raised. 🚨

The following sections are informative. (translation: the juicy part is over, but we still gotta be thorough, bestie 🫑)

🌸 EXAMPLES 🌸

None. literally nothing. empty. a void. the silence is deafening πŸ™ˆ

πŸ¦‹ APPLICATION USAGE πŸ¦‹

On error, the expressions (math_errhandling & MATH_ERRNO) and (math_errhandling & MATH_ERREXCEPT) are independent of each other, but at least one of them must be non-zero. so they're not besties but they do gotta at least both exist, iykyk 🫢

πŸŽ€ RATIONALE πŸŽ€

None. no thoughts, head empty ✨

πŸ‘‘ FUTURE DIRECTIONS πŸ‘‘

None. the future is... also empty. manifesting something tho 🌈

⭐ SEE ALSO ⭐

  • feclearexcept()
  • fetestexcept()
  • ilogb()
  • scalbln()

The Base Definitions volume of POSIX.1‐2017, Section 4.20, Treatment of Error Conditions for Mathematical Functions, <float.h>, <math.h>

Portions of this text are reprinted and reproduced in electronic form from IEEE Std 1003.1-2017, Standard for Information Technology -- Portable Operating System Interface (POSIX), The Open Group Base Specifications Issue 7, 2018 Edition, Copyright (C) 2018 by the Institute of Electrical and Electronics Engineers, Inc and The Open Group. In the event of any discrepancy between this version and the original IEEE and The Open Group Standard, the original IEEE and The Open Group Standard is the referee document. The original Standard can be obtained online at http://www.opengroup.org/unix/online.html .

Any typographical or formatting errors that appear in this page are most likely to have been introduced during the conversion of the source files to man page format. To report such errors, see https://www.kernel.org/doc/man-pages/reporting_bugs.html .


and that's the whole page, bestie πŸ’– this one came from IEEE/The Open Group, 2017 β€” the LOGB(3P) page, version from the POSIX Programmer's Manual. go forth and compute exponents, no cap 🌟

πŸ“¦ where this page comes from