April 6, 1994
Greetings again from Dr. Nemeth to the members and friends
of the NFB R&D Committee.
Here is my next communication concerning the NFB scientific
programmable calculator. -- A.N.
=================================================================
Old Business
Thanks to Tim, Brian, Mike, and Steve for their support and
helpful comments. All right, already, I'll switch from Alt
characters to control characters. Thus, Ctrl-P will invoke the
Pythagorean operator and Ctrl-H will invoke the Add h.ms
operator. As for the Percent Change operator for which I used
Alt-5, another assignment is required since Ctrl-5 makes no
sense. Since no intuitive mnemonic readily comes to mind, I will,
for now, use the question mark, ?, for this operator.
Steve suggested using the numeric keypad for entering
numbers. This is an attractive concept for sighted users.
However, most screen access programs that I know of use the
numeric keypad for interactively communicating with the computer.
I could switch between NUMLOCK on and NUMLOCK off, but that's
more trouble than it's worth. So I will stay with the numbers row
for entering numbers.
You will recall the little trick I used to decide whether a
number is the beginning of a new calculation, or whether it is
the continuation of a calculation already in progress. That trick
consisted of looking at the preceding entry. If the entry was =
or <enter> then the number is the beginning of a new calculation,
and must replace the number on top of the number stack. If the
preceding entry was anything else, then the number is the
continuation of an ongoing calculation, and must be pushed onto
the number stack, thereby enlarging the stack. I therefore offer
the following patch to the flowchart I submitted the last time.
4 Was the previous entry = or <enterth --
-- yes -- 4.1.
-- no -- 4.2.
4.1 Replace the top of the number stack by this number -- 2.
4.2 Push this number onto the number stack -- 2.
Note that I use the Dewey decimal number system whenever I need
to patch a flowchart so as not to disturb the remaining numbers
of the flowchart.
New Business: Unary Operators
I propose to implement the following 16 unary operators, as
promised in my previous posting, using the indicated key
assignments. Each operator operates on x, the number on top
of the number stack, and replaces it with the result of the
operation:
1. Absolute value: | (shift-backslash, vertical bar) Replaces
x by its absolute value.
2. Common logarithm (to the base 10): l Replaces x by its
common (base-10) logarithm.
3. Natural (base e) logarithm: Ctrl-l Replaces x by its
natural (base e) logarithm.
4. 10 to the x power: e Replaces x by 10 to the x power.
5. e to the x power (exponential operator): Ctrl-e Replaces x
by e to the x power.
6. Sine: s Replaces x by its sine.
7. Arc sine: Ctrl-s Replaces x by its arc (inverse) sine.
8. Cosine: c Replaces x by its cosine.
9. Arc cosine: Ctrl-c Replaces x by its arc (inverse) cosine.
10 Tangent: t Replaces x by its tangent.
11. Arc tangent: Ctrl-t Replaces x by its arc (inverse)
tangent.
12. Reciprocal: \ (backslash) Replaces x by its reciprocal
(1/x).
13. Factorial: ! (shift-1) Replaces x by its factorial. x must
be a non-negative integer.
14. x-squared: ~ (tilde) Replaces x by x square.
15. Square root: @ (at sign, shift 2) Replaces x by its square
root.
16. Change sign: _ (underline, shift-minus) Replaces x by its
negative.
Here are some remarks concerning the various unary operators.
The vertical bar (shift-backslash) is used for the absolute value
operator because, in mathematical notation, vertical bars are
used to enclose the quantity whose absolute value is desired.
Pure mathematicians (like me) like to use the base e and
natural logarithms. Rough-and-tumble engineers (like you) like
to use the base 10 and common logarithms (to the base 10.) I have
therefore assigned control characters to the "purer" forms and
used the "uncontrolled characters" (a reference both to the
keyboard and my audience) for representing the "wilder" choices.
In a later posting you will see that the calculator comes up in
"degree" mode rather than in the "radian" mode preferred by us
pure mathematicians.
If the callculator is in "radian" mode, the calculator will
execute the trigonometric functions of sine, cosine, and tangent
directly on x. If the calculator is in "degree" mode, however,
the calculator will first automatically convert x to radians
before performing the abv-mentioned trig functions. Similarly, if
the calculator is in "radian" mode, the inverse trig functions of
arcsine, arccosine, and arctangent will produce a radian result.
But if the calculator is in "degree" mode, the radian results
will be automatically converted to degrees.
I assigned the backslash to the reciprocal operator because
finding the reciprocal of a number is related to division for
which the key assignment is the slash. I have assigned the
exclamation point to the factorial operator because in
mathematical notation, the exclamation point is used for this
purpose.
I assigned the at sign to the square-root operator because
the at sign is shift-2, and 2 is related to the concept of square
root.
Finding the square of a number occurs so frequently in
scientific calculations, that I thought it advisable to assign a
special operator to compute the square of x rather than entering
x, the caret (for y to the x power) and a 2. This is not
necessary, but it is a convenience. I have assigned ~ (tilde)
to this operator, mostly because the tilde is just to the left
of the number row. Shift-2 is no longer available, having been
assigned to the square-root operator.
The change sign operator is the unary minus sign. I have
assigned the underline character (shift-minus) to this operator
because the relationship to the binary minus sign is
self-evident.
I will refer to the scientific calculator that NFB currently
sells as the "old calculator," which tells you of my commitment
to the one on which I am now working. On the old calculator, the
hyperbolic sine, cosine, and tangent functions were implemented.
The inverses of these three hyperbolic functions were not. On the
new calculator, I do not plan to provide direct keys for the
three hyperbolic functions or for their inverses. However, a
separate area will be reserved in the new calculator for storing
and executing canned programs. If desired, the programs for these
hyperbolic functions and their inverses could be included among
these canned programs.
Now I come to a philosophical issue. As I indicated in my last
posting, binary operators will be entered in infix notation, that
is, a binary operator comes between the two operands on which it
operates. This is the way in which we all learned to do
arithmetic and the way that is most comfortable to most people.
As you know, most, although not all, calculators operate using
Reverse Polish Notation (RPN), also known as postfix notation
among the more elite. What I am proposing amounts to a hybrid
calculator in which infix notation is used for binary operators,
but RPN is used for unary operators. This means that a unary
operator comes after the operand which it affects, as implied
by the phrase "postfix notation." For unary operators, this
arrangement is very intuitive. For example, consider the
hypothetical case in which someone wishes to calculate the
negative of the square root of the common logarithm of the
tangent of 60 degrees. In infix notation, a rat's nest of
parentheses would be required as follows:
_(@(l(t(60)))).
(Recall that the underline is the unary minus operator and that
the at-sign is the square-root operator.) Entering and keeping
track of all those parentheses is a chore not suited to the way
people think, although to a calculator, it's duck soup. On the
other hand, using postfix notation, the same problem would be
more easily solved as follows:
60tl@_.
Is there a conflict in using infix notation for binary operators
and postfix notation for unary operators in the same calculation?
In my professional opinion, the answer is no. As a simple
illustration, suppose we wish to find the 12th root of 2. This is
an interesting number to piano technicians like Tim, because if
one starts with the frequency of a tone and applies this
multiplier to it, one obtains the frequency of the next higher
half-tone. By applying this multiplier 12 times to the original
frequency, the result is a frequency which is the double of the
original and thus is the frequency of a tone one octave higher
than the original tone. To compute the 12th root of 2, recall
that this expression must first be rewritten as 2 to the
one-twelfth power. With this change, the infix form of the
calculation would be:
2^(1/12)=.
Using a mixture of infix and postfix notation, we could do the
calculation as follows:
2^12\=.
(Recall that the backslash is the reciprocal operator.)
Some Loose Ends: The y to the x Operator
Recall that the binary operator y to the x power is assigned
to the caret or ^ key (shift-6). Suppose we were to calculate
2^3^4.
What we be the result? Following the flowchart I presented in
the last posting, you will observe that, since the second caret
has the same rank as the first one, the first y to the x power
will be computed before the second one. Thus, the calculator
would first compute 2 to the 3rd power getting a result of 8, and
then it will compute 8 to the 4th power to get a result of 4096.
Although most calculators will produce this result, this violates
the delicate sensibilities of us pure mathematicians. The
principle of mathematical recursion can best be summed up by the
following couplet:
Big fleas have little fleas
Upon their backs to bite 'em,
And little fleas have lesser fleas,
And so ad infinitum.
Before one can get rid of the little fleas, one must get rid
of the lesser fleas. In the above example, exponents at a higher
level are lesser fleas than those at a lower level, and must be
resolved first. Thus, to obtain the result in the approved
mathematical fashion, we must first compute 3 to the 4th power
to get a result of 81, and then compute 2 to the 81st power
to obtain a huge number of the order of magnitude of 10 to the
24th power. In the old calculator, I attended to this anomaly.
Whenever a caret was detected, I tested to see whether there was
already another caret at the top of the operator stack. If there
was, I did not perform a reduction as called for in the
flowchart, but pushed the new caret onto the old one. I plan
to do the same in this new calculator.
The number Pi
You may wonder why I chose Ctrl-p for the Pythagorean
operator, while a plain p was unassigned. The reason is simple. A
plain p is used to enter the number pi into the calculator. This
number is stored to 15 places as:
3.141592653589793
and behaves like any other number. Pi occurs so often in
scientific calculations that it is worthwhile to enter that
number automatically when needed by pressing p. This guarantees
that pi is entered quickly and without error that is so likely
when such a long number must be keyed in by hand.
Add Degrees, Minutes, seconds
Just as Add h.ms is assigned to Ctrl-h, I plan to assign the
Add d.ms op}ator & assign x to ,ctrl-;d4 d.ms, of course, stands
for degrees, minutes, seconds. This operator behaves exactly like
the Add h.ms operator, except that when the addition produces a
number of degrees greater than 360, that number is reduced modulo
360.
So far, I have done no programming or even pseudocoding. I am
still in the planning stages. I thought I would share my thinking
so far with my colleagues. You'll hear from me again as soon as
the flak from this submission dies down.
Abrafam Nemeth, Ph.D.
anemeth@ece.eng.wayne.edu
This archive was generated by hypermail 2b29 : Sun Dec 02 2012 - 01:30:03 PST