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

来自cppreference.com
 
 
 
 
定义于头文件 <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=1
    n-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 。