Namensräume
Varianten
Aktionen

log1p, log1pf, log1pl

Von cppreference.com
< c‎ | numerik‎ | math
 
 
 
Allgemeine mathematische Funktionen
Funktionen
Grundlegende Operationen
(C99)
(C99)
(C99)
(C99)(C99)(C99)(C23)
Maximum/Minimum-Operationen
(C99)
(C99)
Exponentialfunktionen
(C23)
(C99)
(C99)
(C23)
(C23)

(C99)
log1plogp1
(C99)(C23)
(C23)
(C23)
Potenzfunktionen
(C99)
(C23)
(C23)

(C99)
(C23)
(C23)
Trigonometrische und hyperbolische Funktionen
(C23)
(C23)
(C23)
(C23)
(C99)
(C99)
(C99)
Nächste ganze Gleitkommazahlen
(C99)(C99)(C99)
(C99)

(C99)(C99)(C99)
(C23)(C23)(C23)(C23)
Gleitkomma-Manipulation
(C99)(C99)
(C99)(C23)
(C99)
Verengende Operationen
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
Quanten- und Quantenexponent-Funktionen
Dezimal-Neu-Kodierungsfunktionen
Gesamtordnung und Payload-Funktionen
Klassifizierung
(C99)
(C99)
(C99)
(C23)
Fehler- und Gammafunktionen
(C99)
(C99)
(C99)
(C99)
Typen
Makrokonstanten
Spezielle Gleitkommawerte
(C99)(C23)
Argumente und Rückgabewerte
Fehlerbehandlung
Schnelle Operationsanzeigen
 
Definiert in Header <math.h>
float       log1pf( float arg );
(1) (seit C99)
double      log1p( double arg );
(2) (seit C99)
long double log1pl( long double arg );
(3) (seit C99)
Definiert in Header <tgmath.h>
#define log1p( arg )
(4) (seit C99)
1-3) Berechnet den natürlichen (Basis e) Logarithmus von 1 + arg. Diese Funktion ist präziser als der Ausdruck log(1 + arg), wenn arg nahe bei Null liegt.
4) Typ-generische Makrodefinition: Wenn arg den Typ long double hat, wird log1pl aufgerufen. Andernfalls, wenn arg einen ganzzahligen Typ oder den Typ double hat, wird log1p aufgerufen. Andernfalls wird log1pf aufgerufen.

Inhalt

[bearbeiten] Parameter

arg - Gleitkommawert

[bearbeiten] Rückgabewert

Wenn keine Fehler auftreten, wird ln(1 + arg) zurückgegeben.

Wenn ein Domänenfehler auftritt, wird ein implementierungsabhängiger Wert zurückgegeben (NaN, wo unterstützt).

Wenn ein Polfehler auftritt, wird -HUGE_VAL, -HUGE_VALF oder -HUGE_VALL zurückgegeben.

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

[bearbeiten] Fehlerbehandlung

Fehler werden wie in math_errhandling spezifiziert gemeldet.

Domänenfehler treten auf, wenn arg kleiner als -1 ist.

Ein Polfehler kann auftreten, wenn arg gleich -1 ist.

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

  • Wenn das Argument ±0 ist, wird es unverändert zurückgegeben.
  • Wenn das Argument -1 ist, wird -∞ zurückgegeben und FE_DIVBYZERO wird ausgelöst.
  • Wenn das Argument kleiner als -1 ist, wird NaN zurückgegeben und FE_INVALID wird ausgelöst.
  • Wenn das Argument +∞ ist, wird +∞ zurückgegeben.
  • Wenn das Argument NaN ist, wird NaN zurückgegeben.

[bearbeiten] Hinweise

Die Funktionen expm1 und log1p sind nützlich für Finanzberechnungen, beispielsweise bei der Berechnung kleiner täglicher Zinssätze: (1+x)n
-1
kann als expm1(n * log1p(x)) ausgedrückt werden. Diese Funktionen vereinfachen auch die Schreibweise genauer inverser hyperbolischer Funktionen.

[bearbeiten] 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("log1p(0) = %f\n", log1p(0));
    printf("Interest earned in 2 days on $100, compounded daily at 1%%\n"
           " on a 30/360 calendar = %f\n",
           100*expm1(2*log1p(0.01/360)));
    printf("log(1+1e-16) = %g, but log1p(1e-16) = %g\n",
           log(1+1e-16), log1p(1e-16));
 
    // special values
    printf("log1p(-0) = %f\n", log1p(-0.0));
    printf("log1p(+Inf) = %f\n", log1p(INFINITY));
 
    // error handling
    errno = 0; feclearexcept(FE_ALL_EXCEPT);
    printf("log1p(-1) = %f\n", log1p(-1));
    if (errno == ERANGE)
        perror("    errno == ERANGE");
    if (fetestexcept(FE_DIVBYZERO))
        puts("    FE_DIVBYZERO raised");
}

Mögliche Ausgabe

log1p(0) = 0.000000
Interest earned in 2 days on $100, compounded daily at 1%
 on a 30/360 calendar = 0.005556
log(1+1e-16) = 0, but log1p(1e-16) = 1e-16
log1p(-0) = -0.000000
log1p(+Inf) = Inf
log1p(-1) = -Inf
    errno == ERANGE: Result too large
    FE_DIVBYZERO raised

[bearbeiten] Referenzen

  • C23-Standard (ISO/IEC 9899:2024)
  • 7.12.6.9 Die log1p-Funktionen (p: TBD)
  • 7.25 Typ-generische Mathematik <tgmath.h> (S. TBD)
  • F.10.3.9 Die log1p-Funktionen (p: TBD)
  • C17-Standard (ISO/IEC 9899:2018)
  • 7.12.6.9 Die log1p-Funktionen (p: TBD)
  • 7.25 Typ-generische Mathematik <tgmath.h> (S. TBD)
  • F.10.3.9 Die log1p-Funktionen (p: TBD)
  • C11-Standard (ISO/IEC 9899:2011)
  • 7.12.6.9 Die log1p-Funktionen (p: 245)
  • 7.25 Typ-generische Mathematik <tgmath.h> (S. 373-375)
  • F.10.3.9 Die log1p-Funktionen (p: 522)
  • C99-Standard (ISO/IEC 9899:1999)
  • 7.12.6.9 Die log1p-Funktionen (p: 226)
  • 7.22 Typ-generische Mathematik <tgmath.h> (S. 335-337)
  • F.9.3.9 Die log1p-Funktionen (p: 459)

[bearbeiten] Siehe auch

(C99)(C99)
berechnet den natürlichen (Basis-e) Logarithmus (ln(x))
(Funktion) [bearbeiten]
berechnet den gemeinsamen (Basis-10) Logarithmus (log10(x))
(Funktion) [bearbeiten]
(C99)(C99)(C99)
berechnet den Basis-2 Logarithmus (log2(x))
(Funktion) [bearbeiten]
(C99)(C99)(C99)
berechnet e hoch die gegebene Potenz, minus eins (ex-1)
(Funktion) [bearbeiten]