Transcendental equations can return solutions that do not satisfy them, and omit ones that do - substitute every solution into the residual before using it.
`Solve` is reliable on polynomial and rational equations. Equations mixing a
variable with its own exponential or logarithm are where it goes wrong, and it
goes wrong quietly - the answer has the shape of a solution set and is simply
not one:
```wolfram
Solve[x + E^x == 1, x] (* {{x -> 1}}, but 1 + E^1 - 1 is E, not 0 *)
(x + E^x - 1) /. x -> 0 (* 0 - the actual solution, which is not returned *)
Solve[I^w == w, w] (* {{w -> 0}}, though I^0 is 1 *)
```
Both failure directions are present: a returned value that solves nothing, and
a real solution missing from the set. Nothing in the result distinguishes
either case from a correct answer.
Check every solution before relying on it, by substituting into the residual
rather than into the equation (see `Equal` for why the `==` form is not
trustworthy here):
```wolfram
sol = Solve[x^2 == x + 1, x];
Simplify[(x^2 - (x + 1)) /. sol] (* {0, 0} - both solutions hold *)
```
A non-zero residual means the value is not a solution. A residual that will
not simplify to anything definite means the check was inconclusive, not that
the answer is wrong. When `Solve` returns nothing usable for a transcendental
equation, `FindRoot` from a starting point is the reliable route to a numeric
root.