UNPKG

astl

Version:

AssemblyScript-STL (Standard Template Library, migrated from the C++)

45 lines (38 loc) 1.02 kB
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;