exp = function(q, e) {
if (e<1e-7) return undefined
if (q<0) {
let upper=new QQt(1), lower=new QQt([1, 1])
let n=1, n_fact=1, qn=-q
while (qn/n_fact>e) {
upper.num.push(1/n_fact, 1/(n_fact*(n+1)))
lower.num.push(1/(n_fact*(n+1)), 1/(n_fact*(n+1)*(n+2)))
qn*=-q
n_fact*=(n+1)*(n+2)
n+=2
}
return [lower, upper]
}
else {
let lower=new QQt(1), error=new QQt(0)
let n=1, n_fact=1, qn=q
while (n<=q || qn/n_fact*q/(n-q)>e) {
lower.num.push(1/n_fact)
error.num.push(0)
n++
n_fact*=n
qn*=q
}
lower.num.push(1/n_fact)
error.num.push(1/n_fact)
let upper=lower.add(error.div([1, -1/n]))
return [lower, upper]
}
}