arithmoi-0.11.0.1: Efficient basic number-theoretic functions.

Copyright(c) 2018 Alexandre Rodrigues Baldé Andrew Lelechenko
LicenseMIT
MaintainerAndrew Lelechenko <andrew.lelechenko@gmail.com>
Safe HaskellNone
LanguageHaskell2010

Math.NumberTheory.Zeta

Contents

Description

Numeric evaluation of various zeta-functions.

Synopsis

Riemann zeta-function

zetas :: (Floating a, Ord a) => a -> [a] Source #

Infinite sequence of approximate (up to given precision) values of Riemann zeta-function at integer arguments, starting with ζ(0).

>>> take 5 (zetas 1e-14) :: [Double]
[-0.5,Infinity,1.6449340668482264,1.2020569031595942,1.0823232337111381]

Beware to force evaluation of zetas !! 1 if the type a does not support infinite values (for instance, Fixed).

zetasEven :: [ExactPi] Source #

Infinite sequence of exact values of Riemann zeta-function at even arguments, starting with ζ(0). Note that due to numerical errors conversion to Double may return values below 1:

>>> approximateValue (zetasEven !! 25) :: Double
0.9999999999999996

Use your favorite type for long-precision arithmetic. For instance, Fixed works fine:

>>> import Data.Number.Fixed
>>> approximateValue (zetasEven !! 25) :: Fixed Prec50
1.00000000000000088817842111574532859293035196051773

Dirichlet beta-function

betas :: (Floating a, Ord a) => a -> [a] Source #

Infinite sequence of approximate (up to given precision) values of Dirichlet beta-function at integer arguments, starting with β(0).

>>> take 5 (betas 1e-14) :: [Double]
[0.5,0.7853981633974483,0.9159655941772189,0.9689461462593694,0.9889445517411051]

betasOdd :: [ExactPi] Source #

Infinite sequence of exact values of Dirichlet beta-function at odd arguments, starting with β(1).

>>> approximateValue (betasOdd !! 25) :: Double
0.9999999999999987
>>> import Data.Number.Fixed
>>> approximateValue (betasOdd !! 25) :: Fixed Prec50
0.99999999999999999999999960726927497384196726751694

Hurwitz zeta-functions

zetaHurwitz :: forall a. (Floating a, Ord a) => a -> a -> [a] Source #

Values of Hurwitz zeta function evaluated at ζ(s, a) for s ∈ [0, 1 ..].

The algorithm used was based on the Euler-Maclaurin formula and was derived from Fast and Rigorous Computation of Special Functions to High Precision by F. Johansson, chapter 4.8, formula 4.8.5. The error for each value in this recurrence is given in formula 4.8.9 as an indefinite integral, and in formula 4.8.12 as a closed form formula.

It is the user's responsibility to provide an appropriate precision for the type chosen.

For instance, when using Doubles, it does not make sense to provide a number ε < 1e-53 as the desired precision. For Floats, providing an ε < 1e-24 also does not make sense. Example of how to call the function:

>>> zetaHurwitz 1e-15 0.25 !! 5
1024.3489745265808