Typing

solve(6.67e-11*m/6.4e6^2=9.8,m)

into my new Prime in CAS mode gives an empty list as the answer. (nSolve works fine.) Investigating further, solving "a*m=b" fails if a is less than 10^{-12}. I find that the same thing happens with the online version of Xcas, except that the limit there is 10^{-10}.

Although this behaviour isn't a huge inconvenience, it is rather strange. Can anyone suggest why Xcas has been designed to do this? Should the HP Prime copy its behaviour in this respect?

Or am I making a silly mistake somewhere? Any comments welcome!

Nigel (UK)

Anytime you use a decimal point in the CAS view, you are implicitly telling the CAS to switch over into "approximate" mode for that specific computation. So, I recommend using

solve(exact( ... your equation here ... ), var)

Once the CAS is switch over into approximation mode, it _should_ honor the epsilon value in the CAS settings as far as what to do with values that are very small (i.e. when to interpret a small number as zero). **Keep in mind that the command exact() will also use the epsilon setting to convert small numbers to 0!** So the above will not always work for numerical solutions. So, when you try to solve a*m=b with a=10^{-12}, that very well could be interpreted as 0=b and would produce no solutions if b is non-zero.

Generally speaking, use solve() when you are trying to find exact solutions and your equations can be stated in exact terms, and use nSolve() when your equations involve non-exact values.

This concept is fairly common in many computer algebra systems.

Thank you for explaining this. I find the idea of replacing small numbers with zero rather strange - it makes sense when numbers close to one are also present, but in an equation like ax=b where there is no prior reason for the quantities to have any particular magnitude I don't think it should happen.

Changing the epsilon setting hasn't made any difference that I can see - equations with small numbers in still don't get solved. When solving an equation with one unknown in I can use nSolve, which is fine. But suppose I have an equation with two unknowns, involving small numbers as coefficients, and I want to solve the equation to express one of them in terms of the other. For example: rearranging

E=(6.63e-34*3e8/lambda)/1.6e-19

to make lambda the subject. nSolve won't do this, and solve will object to my small coefficients. Do I have to rearrange the expression step-by-step by hand, or does anyone know if is there another way?

I shall spend some time reading the Xcas documentation, I think!

Nigel (UK)

If you enter a:=10^(-12) then a is exact and it will not be replaced by 0. If you enter a:=1e-12, then a is approx and may be replaced by 0 (if epsilon is greater than abs(a)). Instead of using exact, I would recommend to enter your parameters as exact numbers if you plan to use solve, or keep them approx and use fsolve.

Thank you for this idea. As a physicist I still cannot understand the automatic replacement of approximate numbers less than 10^{-12} by zero, though I accept that mathematicians view the world differently!

It makes the CAS much less useful to me. Most formulae that I use involve numbers which are far from 1. Changing epsilon seems to have no effect on the calculator's behaviour (is this a bug?). If I could turn off this behaviour (by making epsilon zero, for example) it would solve the problem, but this doesn't appear possible. Using fsolve is fine if I want to solve an equation with one unknown in it, but it doesn't help me to rearrange an equation to make a different variable the subject.

Wolfram Alpha is quite happy to rearrange formulae with small approximate numbers in, as is the HP-50g and my ancient TI-89!

Thank you again for your suggestions.

Nigel (UK)

P.S. In nearly every other way I am absolutely delighted with the Prime. Please don't think of me as a complainer!