40 requires(std::is_floating_point_v<T> || std::is_integral_v<T>)
42 if (std::is_constant_evaluated()) {
43 using TT = std::conditional_t<std::is_floating_point_v<T>, T,
double>;
44 if (t >= TT{ 0 } and t < std::numeric_limits<TT>::infinity()) {
47 TT curr = t, prev = 0;
49 prev = std::exchange(curr, TT{ 0.5 } * (curr + TT{ t } / curr));
52 return std::numeric_limits<TT>::quiet_NaN();