- xx[side] += ex_to<numeric>(ff.subs(x==xx[side]).evalf());
- fx[side] = ex_to<numeric>(f.subs(x==xx[side]).evalf());
+
+ ex dx_ = ff.subs(x == xx[side]).evalf();
+ if (!is_a<numeric>(dx_))
+ throw std::runtime_error("fsolve(): function derivative does not evaluate numerically [2]");
+ xx[side] += ex_to<numeric>(dx_);
+
+ ex f_x = f.subs(x==xx[side]).evalf();
+ if (!is_a<numeric>(f_x))
+ throw std::runtime_error("fsolve(): function does not evaluate numerically [2]");
+ fx[side] = ex_to<numeric>(f_x);