Stack preservation in the HP35S



#5

Hi all:

In a different thread (Gerson W. Barbosa's "alternative cos(x) and tan(x) [HP-33S]"), Les Wright posted:

    "[...] Unfortunately the routines don't keep the entire stack in its original state, but this is a nice touch. One problem about RPN programs is they make a mess of the stack sometimes, unlike the internal routines."

      The HP35S' ability to mix RPN and algebraic equations in a single program in RPN mode can be used to perform what you want, i.e., program a complicated function that behaves as built-in ones, i.e., the argument is taken from ST X, ST X is replaced by the function's value, and the original argument is stored in LAST X.

      For instance, suppose that you want to program a two-term version of Stirling's approximation to the factorial function X!, namely:

             f(X) = (X/e)^X*Sqrt(2*Pi*X)*(1+1/(12*X)+1/(288*X^2))
      and you want it to behave as a built-in function as far as stack behaviour is concerned. You can achieve that in the HP35S without using any auxiliary registers or variables with this simple trick, key in this little proof-of-concept program in your HP35S:
             A001 LBL A
      ABS
      Roll Down
      (LASTx/e)^LASTx*SQRT(2*Pi*LASTx)*(1+INV(12*LASTx)+INV(288*LASTx^2))
      A005 RTN

      where I've used "/" to denote the division key and "*" to denote the multiplication key, as well as "Pi" to denote the Pi key.

      To run it, just key in you argument in ST X, and XEQ A [ENTER]: the result will be returned to ST X, the previous contents of ST X will be stored in LASTx, and the rest of the stack will be unaffected.

      For instance, in FIX 4, press:

             4 [ENTER] 3 [ENTER] 2 [ENTER]
      5 [XEQ] A [ENTER] -> 120.0025
      [ROLLDOWN] -> 2.0000
      [ROLLDOWN] -> 3.0000
      [ROLLDOWN] -> 4.0000
      [LASTx] -> 5.0000
      Perhaps this is a little slower than pure RPN, but quite convenient indeed. Of course the same trick will work with any f(X) you care to define as long as it can be defined as an equation.

    I'll hope you'll like this little neat technique but if not, just stick to pure RPN and you'll be no worse than before :-)
Best regards from V.

#6

Another option would be to write a little subroutine that stuffs the Y, Z, and T register values into unused data registers and returns the values to the stack when you want to. The temp registers would need to be lettered registers I think, since if you try to access indirect registers putting the value of the index in X register before storing it in I or J will bump off the contents of the T register.

Just a thought.

Les

Edited: 25 July 2007, 2:25 p.m.


#7

Yes, that option would work, but then anyone wanting to use the routine would have to make sure the temporary registers you used to store the stack were not being used by their own programs.

Valentin's idea, and the similar ideas found in the 35s learning modules and datafile issue, make no such requirement. No other registers are affected and the stack is preserved.

#8

That is PDK! (Pretty Darned Kewl.) And not at all obvious. For example, LASTx doesn't show up on the RDN menu in equation mode, since there is a dedicated key.

Thanks for that tip, Valentin! It is now part of my repertoire!

Regards,
Howard


Possibly Related Threads...
Thread Author Replies Views Last Post
  HP35s Program Four Slings Lift Calculation Jean-Marc Biram (Australia) 2 533 12-16-2013, 07:21 PM
Last Post: Jean-Marc Biram (Australia)
  HP35s Calculator Max Rope Tension Program Jean-Marc Biram (Australia) 10 1,059 12-12-2013, 12:03 AM
Last Post: Jean-Marc Biram (Australia)
  HP 50g - select characters on the stack, copy/paste Sean Freeman 7 711 11-20-2013, 07:11 AM
Last Post: Sean Freeman
  Prime: Placing more than 1 item on the RPN stack in a single program? John Colvin 4 530 11-19-2013, 08:59 AM
Last Post: Miguel Toro
  emu48 - copy stack doesn't work (as expected) Thomas Radtke 2 538 11-11-2013, 02:19 PM
Last Post: Thomas Radtke
  HP Prime Stack operations from within a program John Colvin 1 360 11-08-2013, 09:45 PM
Last Post: Helge Gabert
  Prime: Anyway to refresh stack? kris223 5 537 10-16-2013, 05:09 PM
Last Post: kris223
  hp prime - sending program results to the stack giancarlo 6 628 10-15-2013, 02:00 AM
Last Post: Giancarlo
  HP Prime - RPN stack access from programs? Mike Mander (Canada) 10 733 09-30-2013, 11:20 AM
Last Post: steindid
  WP-34S: Stack after divide by 0 Marcel Samek 4 362 08-24-2013, 11:57 PM
Last Post: Paul Dale

Forum Jump: