33 std::array<double, 3>
const roots =
34 boost::math::tools::cubic_roots<double>(
a_,
b_,
c_,
d_);
36 std::vector<double> adjusted_roots;
37 adjusted_roots.reserve(3);
39 double last_valid = std::numeric_limits<double>::quiet_NaN();
41 for (
auto root : roots)
45 if (!std::isnan(last_valid))
47 adjusted_roots.push_back(last_valid);
53 adjusted_roots.push_back(root);
58 ranges::sort(adjusted_roots);
59 return adjusted_roots;