expm1, expm1f, expm1l
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definiert im Header
<math.h>
|
||
|
float
expm1f
(
float
arg
)
;
|
(1) | (seit C99) |
|
double
expm1
(
double
arg
)
;
|
(2) | (seit C99) |
|
long
double
expm1l
(
long
double
arg
)
;
|
(3) | (seit C99) |
|
Definiert im Header
<tgmath.h>
|
||
|
#define expm1( arg )
|
(4) | (seit C99) |
2.7182818
) hoch dem gegebenen Exponenten
arg
, minus
1.0
. Diese Funktion ist genauer als der Ausdruck
exp
(
arg
)
-
1.0
, wenn
arg
nahe null liegt.
arg
den Typ
long
double
hat, wird
expm1l
aufgerufen. Andernfalls, wenn
arg
ganzzahligen Typ oder den Typ
double
hat, wird
expm1
aufgerufen. Andernfalls wird
expm1f
aufgerufen.
Inhaltsverzeichnis |
Parameter
| arg | - | Gleitkommawert |
Rückgabewert
Wenn keine Fehler auftreten,
e
arg
-1
wird 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 spezifiziert.
Wenn die Implementierung IEEE-Gleitkommaarithmetik (IEC 60559) unterstützt,
- Wenn das Argument ±0 ist, wird es unverändert zurückgegeben
- Wenn das Argument -∞ ist, wird -1 zurückgegeben
- Wenn das Argument +∞ ist, wird +∞ zurückgegeben
- Wenn das Argument NaN ist, wird NaN zurückgegeben
Hinweise
Die Funktionen
expm1
und
log1p
sind nützlich für Finanzberechnungen, zum Beispiel bei der Berechnung kleiner täglicher Zinssätze:
(1+x)
n
-1
kann ausgedrückt werden als
expm1
(
n
*
log1p
(
x
)
)
. Diese Funktionen vereinfachen auch das Schreiben genauer inverser hyperbolischer Funktionen.
Für IEEE-kompatible Typen double ist Überlauf garantiert, wenn 709.8 < arg .
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("expm1(1) = %f\n", expm1(1)); printf("Zinsen in 2 Tagen auf $100, täglich verzinst zu 1%%\n" " auf einem 30/360 Kalender = %f\n", 100*expm1(2*log1p(0.01/360))); printf("exp(1e-16)-1 = %g, aber expm1(1e-16) = %g\n", exp(1e-16)-1, expm1(1e-16)); // spezielle Werte printf("expm1(-0) = %f\n", expm1(-0.0)); printf("expm1(-Inf) = %f\n", expm1(-INFINITY)); // Fehlerbehandlung errno = 0; feclearexcept(FE_ALL_EXCEPT); printf("expm1(710) = %f\n", expm1(710)); if (errno == ERANGE) perror(" errno == ERANGE"); if (fetestexcept(FE_OVERFLOW)) puts(" FE_OVERFLOW raised"); }
Mögliche Ausgabe:
expm1(1) = 1.718282
Zinsen in 2 Tagen auf $100, täglich verzinst zu 1%
auf einem 30/360 Kalender = 0.005556
exp(1e-16)-1 = 0, aber expm1(1e-16) = 1e-16
expm1(-0) = -0.000000
expm1(-Inf) = -1.000000
expm1(710) = inf
errno == ERANGE: Ergebnis zu groß
FE_OVERFLOW ausgelöst
Referenzen
- C23-Standard (ISO/IEC 9899:2024):
-
- 7.12.6.3 Die expm1-Funktionen (S: TBD)
-
- 7.25 Typgenerische Mathematik <tgmath.h> (S: TBD)
-
- F.10.3.3 Die expm1-Funktionen (S: TBD)
- C17-Standard (ISO/IEC 9899:2018):
-
- 7.12.6.3 Die expm1-Funktionen (S. 177)
-
- 7.25 Typgenerische Mathematik <tgmath.h> (S. 272-273)
-
- F.10.3.3 Die expm1-Funktionen (S. 379)
- C11-Standard (ISO/IEC 9899:2011):
-
- 7.12.6.3 Die expm1-Funktionen (S: 243)
-
- 7.25 Typgenerische Mathematik <tgmath.h> (S: 373-375)
-
- F.10.3.3 Die expm1-Funktionen (S: 521)
- C99-Standard (ISO/IEC 9899:1999):
-
- 7.12.6.3 Die expm1-Funktionen (S. 223-224)
-
- 7.22 Typgenerische Mathematik <tgmath.h> (S. 335-337)
-
- F.9.3.3 Die expm1-Funktionen (S. 458)
Siehe auch
|
(C99)
(C99)
|
berechnet
e
hoch den gegebenen Exponenten (
\({\small e^x}\)
e
x
)
(Funktion) |
|
(C99)
(C99)
(C99)
|
berechnet
2
hoch den gegebenen Exponenten (
\({\small 2^x}\)
2
x
)
(Funktion) |
|
(C99)
(C99)
(C99)
|
berechnet den natürlichen Logarithmus (Basis
e
) von 1 plus der gegebenen Zahl (
\({\small \ln{(1+x)} }\)
ln(1+x)
)
(Funktion) |
|
C++-Dokumentation
für
expm1
|
|