flexiblesusy is hosted by Hepforge, IPPP Durham
FlexibleSUSY
eta.cpp
Go to the documentation of this file.
1// ====================================================================
2// This file is part of Polylogarithm.
3//
4// Polylogarithm is licenced under the MIT License.
5// ====================================================================
6
7#include "eta.hpp"
8#include <limits>
9
10namespace flexiblesusy {
11
12namespace {
13
14// Table[PolyLog[n,-1], {n,1,54}]
15const double NEG_ETA[54] = {
16 -0.69314718055994531, -0.82246703342411322, -0.90154267736969571,
17 -0.94703282949724592, -0.97211977044690931, -0.98555109129743510,
18 -0.99259381992283028, -0.99623300185264790, -0.99809429754160533,
19 -0.99903950759827157, -0.99951714349806075, -0.99975768514385819,
20 -0.99987854276326512, -0.99993917034597972, -0.99996955121309924,
21 -0.99998476421490611, -0.99999237829204101, -0.99999618786961011,
22 -0.99999809350817168, -0.99999904661158152, -0.99999952325821554,
23 -0.99999976161323082, -0.99999988080131844, -0.99999994039889239,
24 -0.99999997019885696, -0.99999998509923200, -0.99999999254955048,
25 -0.99999999627475340, -0.99999999813736942, -0.99999999906868228,
26 -0.9999999995343403 , -0.9999999997671699 , -0.9999999998835849 ,
27 -0.9999999999417924 , -0.9999999999708962 , -0.9999999999854481 ,
28 -0.9999999999927240 , -0.9999999999963620 , -0.9999999999981810 ,
29 -0.9999999999990905 , -0.9999999999995453 , -0.9999999999997726 ,
30 -0.9999999999998863 , -0.9999999999999432 , -0.9999999999999716 ,
31 -0.9999999999999858 , -0.9999999999999929 , -0.9999999999999964 ,
32 -0.9999999999999982 , -0.9999999999999991 , -0.9999999999999996 ,
33 -0.9999999999999998 , -0.9999999999999999 , -0.9999999999999999
34};
35
36// Table[PolyLog[-2n+1,-1], {n,1,109}]
37const double NEG_ETA_NEG_N[] = {
38 -0.25, 0.125 , -0.25 , 1.0625 ,
39 -7.75 , 86.375 , -1365.25 ,
40 29049.03125 , -800572.75 , 2.7741322625e7 ,
41 -1.18052913025e9 , 6.05239800516875e10 , -3.67941677853775e12 ,
42 2.6170760990658388e014, -2.1531418140800295e016, 2.0288775575173016e018,
43 -2.1708009902623771e020, 2.6173826968455815e022, -3.5324148876863878e024,
44 5.3042033406864907e026, -8.8138218364311577e028, 1.6128065107490779e031,
45 -3.2355470001722734e033, 7.0876727476537493e035, -1.6890450341293966e038,
46 4.3639690731216831e040, -1.2185998827061261e043, 3.6670584803153006e045,
47 -1.1859898526302099e048, 4.1120769493584015e050, -1.5249042436787620e053,
48 6.0349693196941307e055, -2.5437161764210696e058, 1.1396923802632288e061,
49 -5.4180861064753979e063, 2.7283654799994374e066, -1.4529750514918543e069,
50 8.1705519371067450e071, -4.8445781606678368e074, 3.0246694206649519e077,
51 -1.9858807961690493e080, 1.3694474620720087e083, -9.9070382984295808e085,
52 7.5103780796592646e088, -5.9598418264260881e091, 4.9455988887500020e094,
53 -4.2873596927020241e097, 3.8791952037716163e100, -3.6600317773156342e103,
54 3.5978775704117284e106, -3.6818662617467813e109, 3.9192743066421374e112,
55 -4.3363921885063858e115, 4.9833162711780838e118, -5.9438653020209606e121,
56 7.3533439019770134e124, -9.4293465716973561e127, 1.2525196404154548e131,
57 -1.7223787163994400e134, 2.4505178680729537e137, -3.6051616659014189e140,
58 5.4813803836499771e143, -8.6083892012122616e146, 1.3957139354298160e150,
59 -2.3350508860591630e153, 4.0291297374794860e156, -7.1669946227411534e159,
60 1.3136385964069363e163, -2.4799083462304252e166, 4.8198083696385558e169,
61 -9.6400031196958281e172, 1.9833611905147644e176, -4.1959717912682865e179,
62 9.1243724595750010e182, -2.0386902382464212e186, 4.6786408066350383e189,
63 -1.1024400389046488e193, 2.6662916424238258e196, -6.6165585014771755e199,
64 1.6841726974970032e203, -4.3957474813006951e206, 1.1760766011899571e210,
65 -3.2245094671360478e213, 9.0570855543185808e216, -2.6054618058433054e220,
66 7.6741449421726560e223, -2.3136880427961752e227, 7.1382598572408242e230,
67 -2.2530900128907084e234, 7.2736404696018159e237, -2.4010608416429639e241,
68 8.1026279414941787e244, -2.7945745738098571e248, 9.8485095122481192e251,
69 -3.5456055356238575e255, 1.3036999220919921e259, -4.8948166866453784e262,
70 1.8761736309852136e266, -7.3399918877807488e269, 2.9303136033539038e273,
71 -1.1935494277949469e277, 4.9589310621971370e280, -2.1012240064879845e284,
72 9.0784179834777353e287, -3.9987113012775244e291, 1.7952380922182709e295,
73 -8.2136799002055846e298, 3.8290431596908477e302, -1.8184610414701105e306
74};
75
76constexpr bool is_even(int64_t n) noexcept { return n % 2 == 0; }
77
78} // anonymous namespace
79
81double neg_eta(int64_t n) noexcept
82{
83 if (n < 0) {
84 if (is_even(n)) {
85 return 0.0;
86 } else if (-(1 + n)/2 < sizeof(NEG_ETA_NEG_N)/sizeof(NEG_ETA_NEG_N[0])) {
87 return NEG_ETA_NEG_N[-(1 + n)/2];
88 } else if (is_even((1 - n)/2)) {
89 return std::numeric_limits<double>::infinity();
90 } else {
91 return -std::numeric_limits<double>::infinity();
92 }
93 } else if (n == 0) {
94 return -0.5;
95 } else if (n <= sizeof(NEG_ETA)/sizeof(NEG_ETA[0])) {
96 return NEG_ETA[n - 1];
97 } else {
98 return -1.0;
99 }
100}
101
102} // namespace flexiblesusy
constexpr bool is_even(int64_t n) noexcept
Definition: eta.cpp:76
double neg_eta(int64_t n) noexcept
negative Dirichlet eta function
Definition: eta.cpp:81