When you use floating point values like that, then solve() is going to convert them into rational fractions for the purpose of finding a solution. However, the fraction it constructs is going to be based upon converting the double precision representation of values such as 1.69e-19 into fractions. Most of those numbers do not have exact binary representations, so the fractions are not going to be what you would expect. For example, 4.75e-4 is probably not going to be converted to 475/10000. So even if you managed to get a solution from solve() based upon those converted fractions, it would be the solution to a different problem then you thought you were posing.
You would probably be better off trying to use fsolve() if you have the Optimization Toolkit.
