Just a comment. I had a look some time ago at the Owner Handbook for HP19C/HP 29C and I was astonished by the following characteristics: 98 programming steps and 30 registers (16 are constant and the remaining 14 volatile). Why so many registers ? The ratio steps/registers seems not very well balanced. Which program requires so may registers and 98 steps ? If you do compare with the HP 95C - 200 steps and 17 registers - the two models are not that much different (including the printer) but the programming capabilities of the HP 95C are more convincing. In my opinion it would have been fine to convert the extra 14 registers (despite volatile) into extra programming steps. I wonder is some of you share the same feeling or do have an explanation for this unusual feature. Thanks indeed.

(04-22-2018 04:08 PM)Cosmo Wrote: [ -> ]The ratio steps/registers seems not very well balanced. Which program requires so may registers and 98 steps ?

I agree that there are not many programs that fit in 98 steps

and require as much as 30 data registers. For instance I remember a 19C/29C program that solves linear equation systems with 6 unknowns (here only a triangular matrix is stored). A classic application for programmable calculators of this kind was solving a 4x4 system, which – assuming the complete matrix is stored – requires 20 registers plus a few for the program itself.

Assuming the usual 7:1 steps-per-register ratio the 19C and 29C have a total user memory of 98 + 7*30 = 308 bytes (plus stack, plus mode settings etc.). If this had been equally used for data and program this would have been 154 steps and 22 data registers. Or maybe 168 + 20. Which sounds more reasonable, or at least more practical for most applications.

But this includes the volatile memory part. If the technical limitations in 1977 did not allow for more than 98 + 7*16 = 210 bytes of continuous memory this means that it has been almost equally distributed between data and program (112 + 98).

(04-22-2018 04:08 PM)Cosmo Wrote: [ -> ]In my opinion it would have been fine to convert the extra 14 registers (despite volatile) into extra programming steps.

Here I do not agree. IMHO using the volatile part for programs is not an option – turn off the calculator and lose a part of your program, so that probably the remaining part will no longer work as well. Considering only the continuos part, maybe 10 registers + 140 steps would have been possible. But in this case others may have felt that merely 10 "continuous" data registers is less than what they expected.

It didn't take long after the appearance of the 19C and 29C when the first HPs with reallocatable memory showed up. This way you could choose between more data or longer programs. There are cases for both scenarios, so this maybe is the best solution.

Dieter

(04-22-2018 04:08 PM)Cosmo Wrote: [ -> ]Which program requires so may registers and 98 steps ?

Any program which has to deal with matrices always needs as many registers as possible. Just for instance, a program can implement matrix inversion and multiplication in significantly less than 98 steps and if 30 registers are available it can deal with matrices up to 5x5 and thus invert them and solve systems of up to 5 linear equations in 5 unknowns (with a little stack juggling to be able to handle all 6x5 = 30 data and still be able to use register 0 for indirect addressing).

Further, with a different approach (triangularization instead of inversion) you can solve systems up to 7x7 with registers to spare and perhaps 8x8 might still be doable.

Apart from solving linear systems, having 30 or more registers will allow for relatively simple programs to perform polynomial least squares regression or even minimax for degrees 3, 4, and better, and the same applies to statistics. In short there are many useful algorithms that can be implemented in 98 steps or less and general enough to work with arbitrarily large datasets so the more registers the merrier.

That said, being allowed to partition available memory between program space and data space as needed (a la HP-34C) is optimal, of course.

V.

.

I always presumed, perhaps without much thought, that the logic for this was to use the volatile registers as 'workspace' for program variables, and thus typically populated when the program is run (so volatile is OK), while the Continuous registers should be used for storing constants one needs at hand (physics constants that may be unit system dependent, results of some financial calculations or a bank balance, result of a program run, etc.) for arbitrary look-up or to use in a subsequent program run.

(04-22-2018 04:08 PM)Cosmo Wrote: [ -> ].... If you do compare with the HP 95C - 200 steps and 17 registers - the two models are not that much different (including the printer) but the programming capabilities of the HP 95C are more convincing.

I've only physically seen two HP-95C models in my life. The last I heard, only 100 units had actually be made and most of them went into a dumpster at HP back in the day. Is this comparison therefore being made hypothetically?

Thanks,

Jake

(04-23-2018 02:06 PM)Jake Schwartz Wrote: [ -> ] (04-22-2018 04:08 PM)Cosmo Wrote: [ -> ].... If you do compare with the HP 95C - 200 steps and 17 registers - the two models are not that much different (including the printer) but the programming capabilities of the HP 95C are more convincing.

I've only physically seen two HP-95C models in my life. The last I heard, only 100 units had actually be made and most of them went into a dumpster at HP back in the day. Is this comparison therefore being made hypothetically?

Thanks,

Jake

In fact I never see a single HP 95C, unfortunately (!), but I was interested in comparing them since they were produced at essentially the same time (introduction 1977 regarding the HP 19C) and exhibit mostly the same features (use the 'compare features' section), specially with respect to the printer. The HP 95C is a legendary calculator.

(04-23-2018 12:19 AM)rprosperi Wrote: [ -> ]I always presumed, perhaps without much thought, that the logic for this was to use the volatile registers as 'workspace' for program variables, and thus typically populated when the program is run (so volatile is OK), while the Continuous registers should be used for storing constants one needs at hand

At the first look this seems to make some sense. But then I realized that only the first 16 continuous registers were directly accessible, while the upper 14 volatile registers required indirect addressing. So all intermediate data that a program would put there would first require storing an address into R0, then save the value with STO (i).

I think such a procedure does not make much sense. ;-)

Dieter