Namespaces
Variants

ldexp, ldexpf, ldexpl

From cppreference.net
< c ‎ | numeric ‎ | math
Common mathematical functions
Functions
Basic operations
(C99)
(C99)
(C99)
(C99) (C99) (C99) (C23)
Maximum/minimum operations
Exponential functions
Power functions
Trigonometric and hyperbolic functions
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
Arguments and return values
Error handling
Fast operation indicators
Definiert im Header <math.h>
float ldexpf ( float arg, int exp ) ;
(1) (seit C99)
double ldexp ( double arg, int exp ) ;
(2)
long double ldexpl ( long double arg, int exp ) ;
(3) (seit C99)
Definiert im Header <tgmath.h>
#define ldexp( arg, exp )
(4) (seit C99)
1-3) Multipliziert einen Fließkommawert arg mit der Zahl 2 hoch exp .
4) Typgenerisches Makro: Wenn arg den Typ long double besitzt, wird ldexpl aufgerufen. Andernfalls, wenn arg einen ganzzahligen Typ oder den Typ double besitzt, wird ldexp aufgerufen. Andernfalls wird jeweils ldexpf aufgerufen.

Inhaltsverzeichnis

Parameter

arg - Gleitkommawert
exp - Ganzzahlwert

Rückgabewert

Wenn keine Fehler auftreten, arg multipliziert mit 2 hoch exp ( arg×2 exp
) zurückgegeben.

Wenn ein Bereichsfehler aufgrund von Überlauf auftritt, ±HUGE_VAL , ±HUGE_VALF , oder ±HUGE_VALL wird zurückgegeben.

Wenn ein Bereichsfehler aufgrund von Unterlauf auftritt, wird das korrekte Ergebnis (nach Rundung) zurückgegeben.

Fehlerbehandlung

Fehler werden gemeldet, wie in math_errhandling festgelegt.

Wenn die Implementierung IEEE-Gleitkommaarithmetik (IEC 60559) unterstützt,

  • Sofern kein Bereichsfehler auftritt, FE_INEXACT wird niemals ausgelöst (das Ergebnis ist exakt)
  • Sofern kein Bereichsfehler auftritt, wird der aktuelle Rundungsmodus ignoriert
  • Wenn arg ±0 ist, wird es unverändert zurückgegeben
  • Wenn arg ±∞ ist, wird es unverändert zurückgegeben
  • Wenn exp 0 ist, dann wird arg unverändert zurückgegeben
  • Wenn arg NaN ist, wird NaN zurückgegeben.

Hinweise

Auf binären Systemen (wo FLT_RADIX gleich 2 ist), ist ldexp äquivalent zu scalbn .

Die Funktion ldexp ("load exponent"), zusammen mit ihrem Gegenstück, frexp , kann verwendet werden, um die Darstellung einer Fließkommazahl zu manipulieren, ohne direkte Bit-Manipulationen durchzuführen.

Auf vielen Implementierungen ist ldexp weniger effizient als Multiplikation oder Division mit einer Zweierpotenz unter Verwendung arithmetischer Operatoren.

Beispiel

#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 values
    printf("ldexp(-0, 10) = %f\n", ldexp(-0.0, 10));
    printf("ldexp(-Inf, -1) = %f\n", ldexp(-INFINITY, -1));
    // error handling
    errno = 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");
}

Mögliche Ausgabe:

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

Referenzen

  • C23-Standard (ISO/IEC 9899:2024):
  • 7.12.6.6 Die ldexp-Funktionen (S: TBD)
  • 7.25 Typgenerische Mathematik <tgmath.h> (S: TBD)
  • F.10.3.6 Die ldexp-Funktionen (S: TBD)
  • C17-Standard (ISO/IEC 9899:2018):
  • 7.12.6.6 Die ldexp-Funktionen (S.: TBD)
  • 7.25 Typgenerische Mathematik <tgmath.h> (S.: TBD)
  • F.10.3.6 Die ldexp-Funktionen (S.: TBD)
  • C11-Standard (ISO/IEC 9899:2011):
  • 7.12.6.6 Die ldexp-Funktionen (S. 244)
  • 7.25 Typgenerische Mathematik <tgmath.h> (S. 373-375)
  • F.10.3.6 Die ldexp-Funktionen (S. 522)
  • C99-Standard (ISO/IEC 9899:1999):
  • 7.12.6.6 Die ldexp-Funktionen (S. 225)
  • 7.22 Typgenerische Mathematik <tgmath.h> (S. 335-337)
  • F.9.3.6 Die ldexp-Funktionen (S. 459)
  • C89/C90 Standard (ISO/IEC 9899:1990):
  • 4.5.4.3 Die ldexp-Funktion

Siehe auch

zerlegt eine Zahl in Mantisse und eine Potenz von 2
(Funktion)
(C99) (C99) (C99) (C99) (C99) (C99)
berechnet effizient eine Zahl multipliziert mit FLT_RADIX hoch einer Potenz
(Funktion)