函数
<cmath> <ctgmath>

expm1

     double expm1  (double x);      float expm1f (float x);long double expm1l (long double x);
     double expm1 (double x);      float expm1 (float x);long double expm1 (long double x);     double expm1 (T x);           // additional overloads for integral types
计算指数减一
返回 ex 次幂减一:ex-1

对于绝对值较小的 xexpm1 可能比 exp(x)-1 更精确。

头文件 <tgmath.h> 提供了此函数的类型通用宏版本。
此头文件 (<cmath>) 为整数类型提供了额外的重载:这些重载在计算前有效地将 x 转换为 double(为任意整数类型 T 定义)。

参数

x
指数的值。

返回值

ex 次幂,减一。
如果结果的绝对值太大,无法用返回类型的值表示,则函数返回带有正确符号的 HUGE_VAL(或 HUGE_VALFHUGE_VALL),并发生上溢范围错误

如果发生上溢范围错误
- 并且 math_errhandling 设置了 MATH_ERRNO:全局变量 errno 被设置为 ERANGE
- 并且 math_errhandling 设置了 MATH_ERREXCEPT:将引发 FE_OVERFLOW

示例

1
2
3
4
5
6
7
8
9
10
11
12
/* expm1 example */
#include <stdio.h>      /* printf */
#include <math.h>       /* expm1 */

int main ()
{
  double param, result;
  param = 1.0;
  result = expm1 (param);
  printf ("expm1 (%f) = %f.\n", param, result );
  return 0;
}

输出

expm1 (1.000000) = 1.718282.


另见