# std::riemann_zeta, std::riemann_zetaf, std::riemann_zetal

< cpp‎ | numeric‎ | special functions

定义于头文件 `<cmath>` |  |
double riemann_zeta( double arg ); float riemann_zeta( float arg ); long double riemann_zeta( long double arg ); float riemann_zetaf( float arg ); long double riemann_zetal( long double arg ); | (1) | (C++17 起)
double riemann_zeta( IntegralType arg ); | (2) | (C++17 起)

1) 计算 `arg` 的黎曼 zeta 函数。
2) 接受任何整数类型实参的重载集或函数模板。等价于 (1) ，在将参数转型为 double 后。

### 参数

arg | - | 浮点或整数类型的值

### 返回值

若无错误发生，则为 `arg` 的黎曼 Zeta 函数值， ζ(arg) ，定义于整个实轴：

- 对于 arg>1 ，为 Σ∞
  n=1n-arg
- 对于 0≤arg≤1 ，为

  1
  1-21-arg

  Σ∞
  n=1(-1)n-1
  n-arg
- 对于 arg<0 ，为 2arg
  πarg-1
  sin(

  πarg
  2

  )Γ(1−arg)ζ(1−arg)

### 错误处理

可能报告 `math_errhandling` 中指定的错误

- 若参数是 NaN ，则返回 NaN 且不报告定义域错误

### 注解

不支持 C++17 ，但支持 ISO 29124:2010 的实现会提供此函数，若实现定义了 `__STDCPP_MATH_SPEC_FUNCS__` 为至少 201003L 的值，且用户在包含任何标准库头文件前定义了 `__STDCPP_WANT_MATH_SPEC_FUNCS__` 。

不支持 ISO 29124:2010 但支持 TR 19768:2007 (TR1) 的实现，在头文件 `tr1/cmath` 及命名空间 `std::tr1` 中提供此函数。

此函数的一种实现亦可用于 boost.math

### 示例

    #include <cmath>
    #include <iostream>
    int main()
    {
        // 广为人知的值的点检查
        std::cout << "ζ(-1) = " << std::riemann_zeta(-1) << '\n'
                  << "ζ(0) = " << std::riemann_zeta(0) << '\n'
                  << "ζ(1) = " << std::riemann_zeta(1) << '\n'
                  << "ζ(0.5) = " << std::riemann_zeta(0.5) << '\n'
                  << "ζ(2) = " << std::riemann_zeta(2) << ' '
                  << "(π²/6 = " << std::pow(std::acos(-1),2)/6 << ")\n";
    }

输出：

    ζ(-1) = -0.0833333
    ζ(0) = -0.5
    ζ(1) = inf
    ζ(0.5) = -1.46035
    ζ(2) = 1.64493 (π²/6 = 1.64493)

### 外部链接

Weisstein, Eric W. “黎曼 Zeta 函数”来自 MathWorld--A Wolfram Web Resource 。