43 #ifndef _GLIBCXX_TR1_RIEMANN_ZETA_TCC
44 #define _GLIBCXX_TR1_RIEMANN_ZETA_TCC 1
72 template<
typename _Tp>
78 std::__throw_domain_error(__N(
"Bad argument in zeta sum."));
80 const unsigned int max_iter = 10000;
82 for (
unsigned int __k = 1; __k < max_iter; ++__k)
84 _Tp __term =
std::pow(static_cast<_Tp>(__k), -__s);
109 template<
typename _Tp>
115 for (
unsigned int __i = 1; __i < 10000000; ++__i)
117 _Tp __term = __sgn /
std::pow(__i, __s);
123 __zeta /= _Tp(1) -
std::pow(_Tp(2), _Tp(1) - __s);
151 template<
typename _Tp>
166 #if _GLIBCXX_USE_C99_MATH_TR1
167 if (std::tr1::fmod(__s,_Tp(2)) == _Tp(0))
176 #if _GLIBCXX_USE_C99_MATH_TR1
177 *
std::exp(std::tr1::lgamma(_Tp(1) - __s))
186 _Tp __num = _Tp(0.5L);
187 const unsigned int __maxit = 10000;
188 for (
unsigned int __i = 0; __i < __maxit; ++__i)
193 for (
unsigned int __j = 0; __j <= __i; ++__j)
195 #if _GLIBCXX_USE_C99_MATH_TR1
196 _Tp __bincoeff = std::tr1::lgamma(_Tp(1 + __i))
197 - std::tr1::lgamma(_Tp(1 + __j))
198 - std::tr1::lgamma(_Tp(1 + __i - __j));
204 if (__bincoeff > __max_bincoeff)
211 __term += __sgn * __bincoeff *
std::pow(_Tp(1 + __j), -__s);
218 if (
std::abs(__term/__zeta) < __eps)
223 __zeta /= _Tp(1) -
std::pow(_Tp(2), _Tp(1) - __s);
246 template<
typename _Tp>
250 static const _Tp __prime[] = {
251 _Tp(2), _Tp(3), _Tp(5), _Tp(7), _Tp(11), _Tp(13), _Tp(17), _Tp(19),
252 _Tp(23), _Tp(29), _Tp(31), _Tp(37), _Tp(41), _Tp(43), _Tp(47),
253 _Tp(53), _Tp(59), _Tp(61), _Tp(67), _Tp(71), _Tp(73), _Tp(79),
254 _Tp(83), _Tp(89), _Tp(97), _Tp(101), _Tp(103), _Tp(107), _Tp(109)
256 static const unsigned int __num_primes =
sizeof(__prime) /
sizeof(_Tp);
259 for (
unsigned int __i = 0; __i < __num_primes; ++__i)
261 const _Tp __fact = _Tp(1) -
std::pow(__prime[__i], -__s);
267 __zeta = _Tp(1) / __zeta;
287 template<
typename _Tp>
293 else if (__s == _Tp(1))
295 else if (__s < -_Tp(19))
300 #if _GLIBCXX_USE_C99_MATH_TR1
301 *
std::exp(std::tr1::lgamma(_Tp(1) - __s))
308 else if (__s < _Tp(20))
323 #if _GLIBCXX_USE_C99_MATH_TR1
324 * std::tr1::tgamma(_Tp(1) - __s)
359 template<
typename _Tp>
370 const unsigned int __maxit = 10000;
371 for (
unsigned int __i = 0; __i < __maxit; ++__i)
376 for (
unsigned int __j = 0; __j <= __i; ++__j)
378 #if _GLIBCXX_USE_C99_MATH_TR1
379 _Tp __bincoeff = std::tr1::lgamma(_Tp(1 + __i))
380 - std::tr1::lgamma(_Tp(1 + __j))
381 - std::tr1::lgamma(_Tp(1 + __i - __j));
387 if (__bincoeff > __max_bincoeff)
394 __term += __sgn * __bincoeff *
std::pow(_Tp(__a + __j), -__s);
399 __term /= _Tp(__i + 1);
400 if (
std::abs(__term / __zeta) < __eps)
405 __zeta /= __s - _Tp(1);
424 template<
typename _Tp>
435 #endif // _GLIBCXX_TR1_RIEMANN_ZETA_TCC