sharp el-9900

this is a current production sharp scientific programmable graphing calculator.

i wanted to see how todays offerings compare with those gone before. are calculators better now or are they worse? that will depend on what you want from a calculator. some newer machine have poor build quality (hp9g, ti-30xiib), some older machines have better usability. new machines always have new features but are they genuinely useful.

sharp have traditionally been very good at the build and design of their products. the desktop pc-1001 was amazing for 1973, the pocket scientifics of the 80's like the el-512 were well built and well thought out. the host of pocket computers like the pc-1350 were also solid.

this machine is bulky, its big like the hp48g and too thick. the buttons are adequate and the navigation arrows useful. it takes 4 AAA batteries and an additional lithium cr2032 for memory protection. accuracy is fairly good (see the torture test). it comes with a 272 page printed manual which is good for these days except that the programming section is woefully lacking in detail. the front is protected by the now-standard hard plastic cover which clips onto the back and has small rubber feet for desk usage.

an interesting feature for this model is a reversible keyboard. you can eject the keyboard and turn it round. this facilitates a basic mode and an advanced mode for the machine itself and the legends on the keys. the default is advanced mode and i dont really see the point of this feature because if you wanted a simpler machine you'd buy a different model. in any case, its here.

execution speed is fairly fast by calculator standards and it has 64k of memory 47k of which is available for user data which is quite good.

the numerical integration rocks. its amazingly fast. i dont know whether its using a clever method or simply very fast (suspect the latter) for details see definite integration.

i like the pretty-print entry it offers where it will draw the roots, fractions and formulae in a mathematical way as you enter and edit them, but you can switch this off if you hate it.

there is a numerical integrator and solver but no symbolics (like the ti-89) at all. the supported data types are strings, reals, complex numbers, matrices and lists. unfortunately, the data types are not truly integrated in an object model. for example, you can only put real and complex numbers in memories, which are restricted to variables a-z and you cant make a list of anything but numbers.

nevertheless, operations on these data types are fairly complete. you can do matrix arithmetic, add numbers to matrices, square root a list and so on. lists and matrices are separately named as L1 thru L6 and matA thru matJ. complex numbers work with powers, roots, simple ops and logs but not, it appears, with trigs. hyperbolic functions refuse complex too, which is odd because e^x supports them.

the programming model is BASIC, slightly altered so you have to write a+1=>a instead of A=A+1 (the latter would be a comparison). its not procedural and you cant have local variables. apart from that, the usual suspects are there like for/next, while/wend, gosub and label. there are no line numbers.

you can still achieve quite a lot, since you can use all the native data types in the programs and it lets you write and manage several programs giving each names.

some significant limitations with the program language are that you can't call one program from another as a subroutine and you dont have local variables. even if you could call another program, you would have to be sure not to step on global variables which are restricted to the memories a-z. also, it seems, you cant use a program inside the solver, or the grapher (although you can write a program to plot graphs).

example program:

this program is taken from humidity calculation. to calculate the water vapour pressure in equilibrium with pure water in an ideal gas, given its dewpoint temperature (deg C) and the inverse operation, ie calculate the temperature given the pressure.

Input "V-WAT(1) OR T-WAT(2)", A
If A<>1Goto D
Input "TEMP(C)", T
Gosub A
Print X
Label D
Gosub B
Print X-273.15
Label A
If T>0
-6096.9385 / T + 16.635794 - .02711193T + .00001673952 * T^2 + 2.433502Ln T=>X
Label B
If E>=0
Label C
Gosub A
Gosub A
Gosub A
If abs(T-X)>=AGoto C


i transcribed the program as it appears on the unit. there are probably some optimisations, but some of this exercise was to see how easy it was to program.

firstly, i think the program comes out fairly abrasive and fairly unclear. some of that will be my fault because it could be tidier, but then i have had to use gosubs with assumed parameters placed in memories (T in this case). it would have been nice to make LabelA a functional subroutine with a local T parameter.

secondly, LabelB (ie the inverse operation) is a simplified newton solve of LabelA. it would have been nice to be able to call upon the inbuilt solver here. then i could have two programs instead of one with a pointless selector at the beginning. it would be nice to use the menu system for the selector (i dont think you can do this).

on the plus side, you could tidy up the input and output considerably and once in the machine, it runs quite fast and the inverse operation, even though coded manually, returns quickly.