| ||||||||||||||||||
How UltimaCalc Came About
UltimaCalc was designed from the very first day to be a powerful working tool that would sit on a monitor screen occupying little space so that it could always be ready to use.
At that time, we were involved in writing mathematical programs and trying to get them to be as accurate as possible. We soon realised the almost impossibility of doing this when we could not directly calculate to any greater precision than the code we were writing. Calculating corrections by hand very quickly becomes an absolute pain.
So we set about writing arithmetical routines that worked to considerably greater precision than the hardware. To maximise the speed of calculation, the basic addition, subtraction, multiplication and division functions, and a few others for support, were written in carefully crafted assembly language.
Soon afterwards, we needed to write some code that would evaluate simple arithmetical expressions. We realised that these two programming efforts were ideally suited to each other. Why not write a simple arithmetic expression evaluator that worked to arbitrarily high precision? From the start, the high precision routines had been written in such a way that they could be compiled to operate in any precision of our choice. In fact, for one application, we were using 704 bit precision – that’s more than 210 digits!
In another project, we needed to be able to convert numbers to hexadecimal, to make it easier to check what the debugger was showing us. We were surprised that all the calculators we looked at assumed that hexadecimal numbers were always integers. Where this crazy idea has come from, we have no idea. It is simply illogical and contrary to common sense, as well as contrary to good mathematics. So we added proper hexadecimal output routines to our high precision arithmetic expression evaluator.
It seemed clear that what we had arrived at was a pretty useful, if basic, high precision calculator. We decided that it was time to develop this further, by adding mathematical functions. But we also had a problem. Most hand-held calculators have memory keys, to allow adding values to a memory. Some have several memories. How were we to add such a facility? We did not want to add buttons for memory functions – we had already decided that the calculator would be as compact as possible. Besides, with the extra functions, having to constantly hunt around for the correct button to press soon becomes a chore.
Then the thought just struck us – why not turn our arithmetic calculator into an algebraic calculator? We could have as many memories as we wanted! Not only that, but we could now easily add as many functions as we chose to, without the problem of how to access them all.
From there, the rest was just history, as they say…
Enjoy…
