expm1, expm1f, expm1l
| Definiert in 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 in Header <tgmath.h> |
||
| #define expm1( arg ) |
(4) | (seit C99) |
2.7182818) hoch die gegebene Potenz arg, minus 1.0. Diese Funktion ist genauer als der Ausdruck exp(arg)-1.0, wenn arg nahe bei Null liegt.arg den Typ long double hat, wird expm1l aufgerufen. Andernfalls, wenn arg einen ganzzahligen Typ oder den Typ double hat, wird expm1 aufgerufen. Andernfalls wird expm1f aufgerufen.Inhalt |
[edit] Parameter
| arg | - | Gleitkommawert |
[edit] Rückgabewert
Wenn keine Fehler auftreten, wird earg
-1 zurückgegeben.
Wenn ein Bereichsfehler aufgrund von Überlauf 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.
[edit] Fehlerbehandlung
Fehler werden wie in math_errhandling angegeben gemeldet.
Wenn die Implementierung IEEE-Gleitkomma-Arithmetik (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.
[edit] Hinweise
Die Funktionen expm1 und log1p sind nützlich für Finanzberechnungen, z. B. 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 für genaue inverse hyperbolische Funktionen.
Für den IEEE-kompatiblen Typ double ist ein Überlauf garantiert, wenn 709.8 < arg.
[edit] 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("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("exp(1e-16)-1 = %g, but expm1(1e-16) = %g\n", exp(1e-16)-1, expm1(1e-16)); // special values printf("expm1(-0) = %f\n", expm1(-0.0)); printf("expm1(-Inf) = %f\n", expm1(-INFINITY)); //error handling 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
Interest earned in 2 days on $100, compounded daily at 1%
on a 30/360 calendar = 0.005556
exp(1e-16)-1 = 0, but expm1(1e-16) = 1e-16
expm1(-0) = -0.000000
expm1(-Inf) = -1.000000
expm1(710) = inf
errno == ERANGE: Result too large
FE_OVERFLOW raised[edit] Referenzen
- C23-Standard (ISO/IEC 9899:2024)
- 7.12.6.3 The expm1 functions (p: TBD)
- 7.25 Typ-generische Mathematik <tgmath.h> (S. TBD)
- F.10.3.3 The expm1 functions (p: TBD)
- C17-Standard (ISO/IEC 9899:2018)
- 7.12.6.3 The expm1 functions (p: 177)
- 7.25 Typ-generische Mathematik <tgmath.h> (S. 272-273)
- F.10.3.3 The expm1 functions (p: 379)
- C11-Standard (ISO/IEC 9899:2011)
- 7.12.6.3 The expm1 functions (p: 243)
- 7.25 Typ-generische Mathematik <tgmath.h> (S. 373-375)
- F.10.3.3 The expm1 functions (p: 521)
- C99-Standard (ISO/IEC 9899:1999)
- 7.12.6.3 The expm1 functions (p: 223-224)
- 7.22 Typ-generische Mathematik <tgmath.h> (S. 335-337)
- F.9.3.3 The expm1 functions (p: 458)
[edit] Siehe auch
| (C99)(C99) |
berechnet e hoch die gegebene Potenz (ex) (Funktion) |
| (C99)(C99)(C99) |
berechnet 2 hoch die gegebene Potenz (2x) (Funktion) |
| (C99)(C99)(C99) |
berechnet den natürlichen (Basis-e) Logarithmus von 1 plus die gegebene Zahl (ln(1+x)) (Funktion) |
| C++-Dokumentation für expm1
| |