{
function* arccot(x) {
let i = 1,
coefficient = 0,
x_squared_plus_1 = x * x + 1,
series = x / x_squared_plus_1;
for (let term = series; ; ) {
term *= (coefficient += 2) / ((coefficient + 1) * x_squared_plus_1);
if (term === 0 || String(series) === String(series + term)) {
break;
}
let reset = yield {
iterations: i++,
term: term,
result: (series += term)
};
if (reset) {
(i = 1), (coefficient = 0), (term = series = x / x_squared_plus_1);
}
}
return i;
}
await visibility();
for (
let generator = pi(arccot, precision), series;
!(series && series.done);
series = generator.next()
) {
if (series && series.value) yield Promises.delay(duration, series.value);
}
}