Post Reply 
(HP41) Iterated function with convergence to square root (Heron method)
04-25-2023, 03:21 PM (This post was last modified: 04-27-2023 05:09 PM by floppy.)
Post: #1
(HP41) Iterated function with convergence to square root (Heron method)
Since RPN and FOCAL with it stack is efficient for iterated functions, here a posting of the iterated function of aN=(an + b/an) / 2 which result will be SQRT(b).
Other way to represent this is f(x,y)=(x+y/x,y). Then f(f(f(..(a0,b))))=(sqrt(b),b).
The start value a0 can be anything (result will have the negativ sign if the start value a0<0).
Nothing really new:
- no register used in comparison to the programm available in page 11 in https://literature.hpcalc.org/community/...ram-de.pdf )
- start value can be defined (will be defined as b if a0=0)
- no calculation done if b=0

Code:
; SQRT as iterated function, "möbius transform like" = only + * or /  
;
; Execution/Inputs
;  a0 ENTER b XEQ ALPHA SQRT ALPHA or
;  b XEQ ALPHA SQRT ALPHA
;  ... b number which should be squared
;  ... a0 is a start value for the iteration
;  ... if a0 is negativ, the result will be negativ value of the square root
;
; Outputs
;  results in stack X: sqrt(b)
;
; Modules used
;  None
;
; use Register none
;
; stack effect: all overwritten (X Y Z LASTX)
;
; create raw file with "rpncomp --raw-output SQRT.TXT", upload
;  in V41 emulator and store into virtual drive with "ilper"
;  .. hp41uc https://sourceforge.net/projects/hp41uc/ or
;     rpncomp https://github.com/hth313/Calypsi-tool-chains
;  .. V41   https://hp.giesselink.com/v41.htm
;  .. ilper https://hp.giesselink.com/hpil.htm

; under CC BY SA CreativeCommons 4.0 
;  floppy @ https://www.hpmuseum.org/forum/
;
; idea taken from here
; https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Heron's_method
;
; change log
;  date 2023 04 24 creation
;  date 2023 04 25 testing..
;
; comments
;  aN=(an + b/an) / 2
;  .. a number to be squared.. it mean aN (N-> infinite) = sqrt(a)
;
LBL "SQRT"
;                  X            Y           Z          T
;                  b           a0
X<=0?        ; in case b <= 0 dont do anything
RTN          ; ... just go out 
X<>Y         ;     a0           b  
X=0?         ; in case a = 0 set a to b
XEQ 00
X<>Y         ;     b            a0
;
STO Z        ;     b            a0          b
X<>Y         ;     a0           b          b
LBL 01
  RCL Z      ;     b            an          XX          b
  X<>Y       ;     an           b           XX          b
  STO Z      ;     an           b           an          b
  /          ;     b/an         an          b           b
  LASTX      ;     an          b/an         an          b    
  +          ;  (an+b/an)       an          b           b
  2
  /          ; (an+b/an)/2=aN   an          b           b
  X#Y?
  GOTO 01
RTN
LBL 00       ;     X            Y           Z          T
  RDN        ;     b            
  ENTER      ;     b            a(=b)         0     
RTN      
END

HP71 4TH/ASM & Multimod, HP41CV/X & Nov64d, PILBOX, HP-IL 821.62A & 64A & 66A, Deb11 64b-PC & PI2 3 4 w/ ILPER, VIDEO80, V41 & EMU71, DM41X, HP75D
Find all posts by this user
Quote this message in a reply
Post Reply 


Messages In This Thread
(HP41) Iterated function with convergence to square root (Heron method) - floppy - 04-25-2023 03:21 PM



User(s) browsing this thread: 1 Guest(s)