astl
Version:
AssemblyScript-STL (Standard Template Library, migrated from the C++)
45 lines (38 loc) • 1.02 kB
text/typescript
import { tgamma } from "./gamma";
export function riemann_zeta(arg: f64): f64
{
if (arg < 0)
return _Negative(arg);
else if (arg === 0)
return -0.5;
else if (arg < 1)
return _Fractional(arg);
else if (arg === 1)
return Infinity;
else
return _Positive(arg);
}
function _Negative(arg: f64): f64
{
return Math.pow(2, arg)
* Math.pow(Math.PI, arg - 1)
* Math.sin(Math.PI * arg / 2)
* tgamma(1 - arg)
* riemann_zeta(1 - arg);
}
function _Fractional(arg: f64): f64
{
const divider: f64 = 1 - Math.pow(2, 1 - arg);
let sigma: f64 = 0;
for (let k: usize = 1; k <= INFINITY; ++k)
sigma += Math.pow(-1, k - 1) * Math.pow(k, -arg);
return sigma / divider;
}
function _Positive(arg: f64): f64
{
let sigma: f64 = 0;
for (let k: usize = 1; k <= INFINITY; ++k)
sigma += Math.pow(k, -arg);
return sigma;
}
@inline const INFINITY: usize = 100 * 1000;