std::log1p, std::log1pf, std::log1pl
| Definiert in der Header-Datei <cmath> |
||
| (1) | ||
float log1p ( float num ); double log1p ( double num ); |
(bis C++23) | |
| /* Gleitkommazahl-Typ */ log1p ( /*Gleitkommazahltyp*/ num ); |
(seit C++23) (constexpr seit C++26) |
|
float log1pf( float num ); |
(2) | (seit C++11) (constexpr seit C++26) |
long double log1pl( long double num ); |
(3) | (seit C++11) (constexpr seit C++26) |
| SIMD-Überladung (seit C++26) |
||
| Definiert im Header <simd> |
||
| template< /*math-floating-point*/ V > constexpr /*deduzierter-simd-t*/<V> |
(S) | (seit C++26) |
| Zusätzliche Überladungen (seit C++11) |
||
| Definiert in der Header-Datei <cmath> |
||
template< class Integer > double log1p ( Integer num ); |
(A) | (constexpr seit C++26) |
std::log1p für alle cv-unqualifizierten Gleitkommatypen als Parametertyp bereit.(seit C++23)|
S) Die SIMD-Überladung führt eine elementweise Anwendung von
std::log1p auf v_num durch.
|
(seit C++26) |
|
A) Zusätzliche Überladungen werden für alle ganzzahligen Typen bereitgestellt, die als double behandelt werden.
|
(seit C++11) |
Inhalt |
[edit] Parameter
| num | - | Gleitkomma- oder Ganzzahlwert |
[edit] Rückgabewert
Wenn keine Fehler auftreten, wird ln(1+num) zurückgegeben.
Wenn ein Domänenfehler auftritt, wird ein implementierungsabhängiger Wert zurückgegeben (NaN, wo unterstützt).
Wenn ein Pol-Fehler auftritt, werden -HUGE_VAL, -HUGE_VALF oder -HUGE_VALL zurückgegeben.
Wenn ein Bereichsfehler aufgrund eines Unterlaufs auftritt, wird das korrekte Ergebnis (nach Rundung) zurückgegeben.
[edit] Fehlerbehandlung
Fehler werden wie in math_errhandling beschrieben gemeldet.
Ein Definitionsbereichsfehler tritt auf, wenn num kleiner als -1 ist.
Ein Polfehler kann auftreten, wenn num 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 ausgelöst.
- Wenn das Argument kleiner als -1 ist, wird NaN zurückgegeben und FE_INVALID ausgelöst.
- Wenn das Argument +∞ ist, wird +∞ zurückgegeben.
- Wenn das Argument NaN ist, wird NaN zurückgegeben.
[edit] Anmerkungen
Die Funktionen std::expm1 und std::log1p sind für Finanzberechnungen nützlich, zum Beispiel bei der Berechnung kleiner täglicher Zinssätze: (1 + x)n
- 1 kann als std::expm1(n * std::log1p(x)) ausgedrückt werden. Diese Funktionen vereinfachen auch die genaue Schreibweise inverser hyperbolischer Funktionen.
Die zusätzlichen Überladungen müssen nicht notwendigerweise genau wie (A) bereitgestellt werden. Sie müssen nur ausreichen, um sicherzustellen, dass für ihr Argument num vom ganzzahligen Typ std::log1p(num) die gleiche Wirkung hat wie std::log1p(static_cast<double>(num)).
[edit] Beispiel
#include <cerrno> #include <cfenv> #include <cmath> #include <cstring> #include <iostream> // #pragma STDC FENV_ACCESS ON int main() { std::cout << "log1p(0) = " << log1p(0) << '\n' << "Interest earned in 2 days on $100, compounded daily at 1%\n" << " on a 30/360 calendar = " << 100 * expm1(2 * log1p(0.01 / 360)) << '\n' << "log(1+1e-16) = " << std::log(1 + 1e-16) << ", but log1p(1e-16) = " << std::log1p(1e-16) << '\n'; // special values std::cout << "log1p(-0) = " << std::log1p(-0.0) << '\n' << "log1p(+Inf) = " << std::log1p(INFINITY) << '\n'; // error handling errno = 0; std::feclearexcept(FE_ALL_EXCEPT); std::cout << "log1p(-1) = " << std::log1p(-1) << '\n'; if (errno == ERANGE) std::cout << " errno == ERANGE: " << std::strerror(errno) << '\n'; if (std::fetestexcept(FE_DIVBYZERO)) std::cout << " FE_DIVBYZERO raised\n"; }
Mögliche Ausgabe
log1p(0) = 0
Interest earned in 2 days on $100, compounded daily at 1%
on a 30/360 calendar = 0.00555563
log(1+1e-16) = 0, but log1p(1e-16) = 1e-16
log1p(-0) = -0
log1p(+Inf) = inf
log1p(-1) = -inf
errno == ERANGE: Result too large
FE_DIVBYZERO raised[edit] Siehe auch
| (C++11)(C++11) |
berechnet den natürlichen (Basis e) Logarithmus (ln(x)) (Funktion) |
| (C++11)(C++11) |
berechnet den dekadischen (Basis 10) Logarithmus (log10(x)) (Funktion) |
| (C++11)(C++11)(C++11) |
Basis 2 Logarithmus der gegebenen Zahl (log2(x)) (Funktion) |
| (C++11)(C++11)(C++11) |
gibt e hoch der gegebenen Potenz minus 1 zurück (ex-1) (Funktion) |
| C-Dokumentation für log1p
| |