Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      logb, logbf, logbl

      From cppreference.com
      <c‎ |numeric‎ |math
       
       
       
      Common mathematical functions
      Functions
      Basic operations
      (C99)
      (C99)
      (C99)
      (C99)(C99)(C99)(C23)
      Maximum/minimum operations
      (C99)
      (C99)
      Exponential functions
      (C23)
      (C99)
      (C99)
      (C23)
      (C23)

      (C99)
      (C99)(C23)
      (C23)
      (C23)
      Power functions
      (C99)
      (C23)
      (C23)

      (C99)
      (C23)
      (C23)
      Trigonometric and hyperbolic functions
      (C23)
      (C23)
      (C23)
      (C23)
      (C99)
      (C99)
      (C99)
      Nearest integer floating-point
      (C99)(C99)(C99)
      (C23)(C23)(C23)(C23)
      Floating-point manipulation
      (C99)(C99)
      (C99)(C23)
      logb
      (C99)
      Narrowing operations
      (C23)
      (C23)
      (C23)
      (C23)
      (C23)
      (C23)
      Quantum and quantum exponent
      Decimal re-encoding functions
      Total order and payload functions
      Classification
      Error and gamma functions
      (C99)
      (C99)
      (C99)
      (C99)
      Types
      Macro constants
      Special floating-point values
      (C99)(C23)
      Arguments and return values
      Error handling
      Fast operation indicators
       
      Defined in header<math.h>
      float       logbf(float arg);
      (1)(since C99)
      double      logb(double arg);
      (2)(since C99)
      longdouble logbl(longdouble arg);
      (3)(since C99)
      Defined in header<tgmath.h>
      #define logb( arg )
      (4)(since C99)
      1-3) Extracts the value of the unbiased radix-independent exponent from the floating-point argumentarg, and returns it as a floating-point value.
      4) Type-generic macros: Ifarg has typelongdouble,logbl is called. Otherwise, ifarg has integer type or the typedouble,logb is called. Otherwise,logbf is called.

      Formally, the unbiased exponent is the signed integral part oflogr|arg| (returned by this function as a floating-point value), for non-zeroarg, wherer isFLT_RADIX. Ifarg is subnormal, it is treated as though it was normalized.

      Contents

      [edit]Parameters

      arg - floating-point value

      [edit]Return value

      If no errors occur, the unbiased exponent ofarg is returned as a signed floating-point value.

      If a domain error occurs, an implementation-defined value is returned.

      If a pole error occurs,-HUGE_VAL,-HUGE_VALF, or-HUGE_VALL is returned.

      [edit]Error handling

      Errors are reported as specified inmath_errhandling.

      Domain or range error may occur ifarg is zero.

      If the implementation supports IEEE floating-point arithmetic (IEC 60559),

      [edit]Notes

      POSIX requires that a pole error occurs ifarg is ±0.

      The value of the exponent returned bylogb is always1 less than the exponent returned byfrexp because of the different normalization requirements: for the exponente returned bylogb,|arg*r-e
      |
      is between1 andr (typically between1 and2), but for the exponente returned byfrexp,|arg*2-e
      |
      is between0.5 and1.

      [edit]Example

      Compares different floating-point decomposition functions.

      Run this code
      #include <fenv.h>#include <float.h>#include <math.h>#include <stdio.h>// #pragma STDC FENV_ACCESS ON int main(void){double f=123.45;printf("Given the number %.2f or %a in hex,\n", f, f); double f3;double f2=modf(f,&f3);printf("modf() makes %.0f + %.2f\n", f3, f2); int i;    f2=frexp(f,&i);printf("frexp() makes %f * 2^%d\n", f2, i);     i= logb(f);printf("logb()/logb() make %f * %d^%d\n", f/scalbn(1.0, i),FLT_RADIX, i); // error handlingfeclearexcept(FE_ALL_EXCEPT);printf("logb(0) = %f\n", logb(0));if(fetestexcept(FE_DIVBYZERO))puts("    FE_DIVBYZERO raised");}

      Possible output:

      Given the number 123.45 or 0x1.edccccccccccdp+6 in hex,modf() makes 123 + 0.45frexp() makes 0.964453 * 2^7logb()/logb() make 1.928906 * 2^6logb(0) = -Inf    FE_DIVBYZERO raised

      [edit]References

      • C23 standard (ISO/IEC 9899:2024):
      • 7.12.6.11 The logb functions (p: TBD)
      • 7.25 Type-generic math <tgmath.h> (p: TBD)
      • F.10.3.11 The logb functions (p: TBD)
      • C17 standard (ISO/IEC 9899:2018):
      • 7.12.6.11 The logb functions (p: 179-180)
      • 7.25 Type-generic math <tgmath.h> (p: 373-375)
      • F.10.3.11 The logb functions (p: 381)
      • C11 standard (ISO/IEC 9899:2011):
      • 7.12.6.11 The logb functions (p: 246)
      • 7.25 Type-generic math <tgmath.h> (p: 373-375)
      • F.10.3.11 The logb functions (p: 522)
      • C99 standard (ISO/IEC 9899:1999):
      • 7.12.6.11 The logb functions (p: 227)
      • 7.22 Type-generic math <tgmath.h> (p: 335-337)
      • F.9.3.11 The logb functions (p: 459)

      [edit]See also

      breaks a number into significand and a power of2
      (function)[edit]
      (C99)(C99)(C99)
      extracts exponent of the given number
      (function)[edit]
      (C99)(C99)(C99)(C99)(C99)(C99)
      computes efficiently a number timesFLT_RADIX raised to a power
      (function)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=c/numeric/math/logb&oldid=172046"

      [8]ページ先頭

      ©2009-2025 Movatter.jp