Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      ldexp, ldexpf, ldexpl

      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
      ldexp
      (C99)(C99)
      (C99)(C23)
      (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       ldexpf(float arg,intexp);
      (1)(since C99)
      double      ldexp(double arg,intexp);
      (2)
      longdouble ldexpl(longdouble arg,intexp);
      (3)(since C99)
      Defined in header<tgmath.h>
      #define ldexp( arg, exp )
      (4)(since C99)
      1-3) Multiplies a floating-point valuearg by the number2 raised to theexp power.
      4) Type-generic macro: Ifarg has typelongdouble,ldexpl is called. Otherwise, ifarg has integer type or the typedouble,ldexp is called. Otherwise,ldexpf is called, respectively.

      Contents

      [edit]Parameters

      arg - floating-point value
      exp - integer value

      [edit]Return value

      If no errors occur,arg multiplied by 2 to the power ofexp (arg×2exp
      ) is returned.

      If a range error due to overflow occurs,±HUGE_VAL,±HUGE_VALF, or±HUGE_VALL is returned.

      If a range error due to underflow occurs, the correct result (after rounding) is returned.

      [edit]Error handling

      Errors are reported as specified inmath_errhandling.

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

      • Unless a range error occurs,FE_INEXACT is never raised (the result is exact)
      • Unless a range error occurs, thecurrent rounding mode is ignored
      • Ifarg is ±0, it is returned, unmodified
      • Ifarg is ±∞, it is returned, unmodified
      • Ifexp is 0, thenarg is returned, unmodified
      • Ifarg is NaN, NaN is returned.

      [edit]Notes

      On binary systems (whereFLT_RADIX is2),ldexp is equivalent toscalbn.

      The functionldexp ("load exponent"), together with its dual,frexp, can be used to manipulate the representation of a floating-point number without direct bit manipulations.

      On many implementations,ldexp is less efficient than multiplication or division by a power of two using arithmetic operators.

      [edit]Example

      Run this code
      #include <errno.h>#include <fenv.h>#include <float.h>#include <math.h>#include <stdio.h>// #pragma STDC FENV_ACCESS ON int main(void){printf("ldexp(7, -4) = %f\n", ldexp(7,-4));printf("ldexp(1, -1074) = %g (minimum positive subnormal double)\n",            ldexp(1,-1074));printf("ldexp(nextafter(1,0), 1024) = %g (largest finite double)\n",            ldexp(nextafter(1,0),1024)); // special valuesprintf("ldexp(-0, 10) = %f\n", ldexp(-0.0,10));printf("ldexp(-Inf, -1) = %f\n", ldexp(-INFINITY,-1)); // error handlingerrno=0;feclearexcept(FE_ALL_EXCEPT);printf("ldexp(1, 1024) = %f\n", ldexp(1,1024));if(errno==ERANGE)perror("    errno == ERANGE");if(fetestexcept(FE_OVERFLOW))puts("    FE_OVERFLOW raised");}

      Possible output:

      ldexp(7, -4) = 0.437500ldexp(1, -1074) = 4.94066e-324 (minimum positive subnormal double)ldexp(nextafter(1,0), 1024) = 1.79769e+308 (largest finite double)ldexp(-0, 10) = -0.000000ldexp(-Inf, -1) = -infldexp(1, 1024) = inf    errno == ERANGE: Numerical result out of range    FE_OVERFLOW raised

      [edit]References

      • C23 standard (ISO/IEC 9899:2024):
      • 7.12.6.6 The ldexp functions (p: TBD)
      • 7.25 Type-generic math <tgmath.h> (p: TBD)
      • F.10.3.6 The ldexp functions (p: TBD)
      • C17 standard (ISO/IEC 9899:2018):
      • 7.12.6.6 The ldexp functions (p: TBD)
      • 7.25 Type-generic math <tgmath.h> (p: TBD)
      • F.10.3.6 The ldexp functions (p: TBD)
      • C11 standard (ISO/IEC 9899:2011):
      • 7.12.6.6 The ldexp functions (p: 244)
      • 7.25 Type-generic math <tgmath.h> (p: 373-375)
      • F.10.3.6 The ldexp functions (p: 522)
      • C99 standard (ISO/IEC 9899:1999):
      • 7.12.6.6 The ldexp functions (p: 225)
      • 7.22 Type-generic math <tgmath.h> (p: 335-337)
      • F.9.3.6 The ldexp functions (p: 459)
      • C89/C90 standard (ISO/IEC 9899:1990):
      • 4.5.4.3 The ldexp function

      [edit]See also

      breaks a number into significand and a power of2
      (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/ldexp&oldid=172039"

      [8]ページ先頭

      ©2009-2025 Movatter.jp