Post Reply 
Happy Pi day everyone!!
03-17-2019, 01:48 AM (This post was last modified: 03-22-2019 04:39 PM by Gerson W. Barbosa.)
Post: #25
RE: Happy Pi day everyone!!
(03-14-2019 08:58 PM)Gerson W. Barbosa Wrote:  Optimization and conversion to HP calculators are left as an exercise for the reader.

The following is a very readable RPL version of the wp34s program in post #6:

« '3/2*√3' '2*√3' → n a b
  « 1 n
    START '√(a*b)' →NUM 'a' STO '2*a*b/(a+b)' →NUM 'b' STO
    NEXT '√(a*b)' →NUM 'a' 1 'n' STO+ STO '((2+2^((1/a-72*n-1)/36))*a+b)/(3+2^((1/a-72*n-1)/36))' EVAL
  »
»


The original algorithm (in modern terms) by Archimedes of Syracuse is followed by a simple empirical adjustment formula in function of a and b, his lower and upper bounds, respectively. Starting with inscribed and circumscribed hexagons to a circle of diameter 1, after four more iterations we obtain a = 3.14103195089 and b = 3.14271459965, which Archimedes rationalized to 223/71 and 22/7.

' (27*(a^2*b)^(1/3) - 4*(2*a + b))/15' is a better formula. Furthermore, it allows for a shorter wp34s program:

0001 **LBL A
0002 # 003
0003 [sqrt]
0004 RCL+ X
0005 # 1/2
0006 INC X
0007 RCL[times] L
0008 RCL[times] Y
0009 [sqrt]
0010 ||
0011 STO+ X
0012 RCL L
0013 DSE Z
0014 BACK 006
0015 RCL[times] Y
0016 [sqrt]
0017 [cmplx]ENTER
0018 x[^2]
0019 [times]
0020 [^3][sqrt]
0021 # 027
0022 [times]
0023 [<->] YZXT
0024 STO+ X
0025 +
0026 # 004
0027 [times]
0028 -
0029 # 015
0030 /
0031 END


 4 A -> 3.141592653583662847516781540551053

10 A -> 3.141592653589793238462554257894971

16 A -> 3.141592653589793238462643383279503



(03-17-2019, 01:48 PM) PS: In order to keep both a and b on the stack, let’s change lines 0023 through 0027 to

0023 RCL Y
0024 RCL+ X
0025 RCL+ T
0026 RCL+ X
0027 RCL+ X

4 A -> 3.14159265358 ; (27*(a^2*b)^(1/3) - 4*(2*a + b))/15
 Rv -> 3.14103195089 ; a
 Rv -> 3.14271459965 ; b



(03-19-2019, 06:42 PM) PPS: 1 iteration should return the values for the hexagon, not the dodecagon. Fixed.

--------

WP 34S:

0001 **LBL A
0002 # 004
0003 # 027
0004 [sqrt]
0005 RCL/ Y
0006 y[<->] L
0007 RCL[times] Y
0008 [sqrt]
0009 ||
0010 STO+ X
0011 RCL L
0012 DSE Z
0013 BACK 006
0014 RCL[times] Y
0015 [sqrt]
0016 [cmplx]ENTER
0017 x[^2]
0018 [times]
0019 [^3][sqrt]
0020 # 027
0021 [times]
0022 RCL Y
0023 STO+ X
0024 RCL+ T
0025 STO+ X
0026 STO+ X
0027 -
0028 # 015
0029 /
0030 END

 1 A -> 3.141460911773498978633977995517088 ; (27*(a^2*b)^(1/3) - 4*(2*a + b))/15
  Rv -> 2.999999999999999999999999999999999 ; a, perimeter of the inscribed hexagon ( 3 )
  Rv -> 3.464101615137754587054892683011744 ; b, perimeter of the circumscribed hexagon ( √12 )

 5 A -> 3.141592653583662847516781540551053 ; (27*(a^2*b)^(1/3) - 4*(2*a + b))/15
  Rv -> 3.141031950890509638111352926459658 ; a, perimeter of the inscribed 96-gon
  Rv -> 3.142714599645368298168859093772122 ; b, perimeter of the circumscribed 96-gon

17 A -> 3.141592653589793238462643383279503 ; (27*(a^2*b)^(1/3) - 4*(2*a + b))/15
  Rv -> 3.141592653556370963662823316554114 ; a, perimeter of the inscribed 196608-gon
  Rv -> 3.141592653656637788064203581586042 ; b, perimeter of the circumscribed 196608-gon

--------

HP-42S/Free42:

00 { 72-Byte Prgm }
01▸LBL "PI"
02 27
03 SQRT
04 1.6875
05 SQRT
06▸LBL 00
07 RCL× ST Y
08 SQRT
09 RCL× ST Y
10 X<>Y
11 LASTX
12 +
13 LASTX
14 R↓
15 ÷
16 STO+ ST X
17 R↑
18 DSE ST Z
19 GTO 00
20 RCL× ST Y
21 SQRT
22 STO ST Z
23 X↑2
24 RCL× ST Y
25 3
26 1/X
27 Y↑X
28 27
29 ×
30 R↑
31 STO+ ST X
32 RCL+ ST Z
33 STO+ ST X
34 STO+ ST X
35 -
36 15
37 ÷
38 .END.

 1 XEQ PI -> X: 3.141460911773498978633977995517088

 R↓       -> Y: 3
          -> X: 3.464101615137754587054892683011746


17 XEQ PI -> X: 3.141592653589793238462643383279505

 R↓       -> Y: 3.141592653556370963662823316554116
          -> X: 3.141592653656637788064203581586044

--------

HP 50g:

5

« '3/4*√3' '3*√3' → n a b
  « 1 n
    START '√(a*b)' →NUM 'a' STO
      '2*a*b/(a+b)' →NUM 'b' STO
    NEXT
    '√(a*b)' →NUM 'a' STO a b
    '(27*(a^2*b)^(1/3)-4*(2*a+b))/15' EVAL
  »
»

EVAL ->

3:    3.14103195089
2:    3.14271459965
1:    3.14159265358

--------

Finally, a stack-only wp34s version that preserves the original X-register content:

0001 **LBL A
0002 # 004
0003 # 027
0004 [sqrt]
0005 RCL/ Y
0006 y[<->] L
0007 RCL[times] Y
0008 [sqrt]
0009 ||
0010 STO+ X
0011 RCL L
0012 DSE Z
0013 BACK 006
0014 RCL[times] Y
0015 [sqrt]
0016 STO Z
0017 x[^2]
0018 RCL[times] Y
0019 [^3][sqrt]
0020 STO L
0021 CLx
0022 # 027
0023 STO[times] L
0024 x[<->] Z
0025 z[<->] L
0026 STO L
0027 STO+ L
0028 x[<->] Y
0029 STO+ L
0030 x[<->] L
0031 STO+ X
0032 STO+ X
0033 STO- Z
0034 CLx
0035 # 015
0036 STO/ Z
0037 x[<->] L
0038 x[<->] Z
0039 END

314 ENTER 5 A -> 3.141592653583662847516781540551053
           Rv -> 3.141031950890509638111352926459658
           Rv -> 3.142714599645368298168859093772122
           Rv -> 314

--------


(03-20-2019, 02:17 PM) PPPS: It ain't over till it's over (which doesn't mean further optimizations are not possible).

--------

WP 34S:

0001 **LBL A
0002 # 027
0003 [sqrt]
0004 # 1/2
0005 RCL[times] Y
0006 ||
0007 STO+ X
0008 RCL L
0009 RCL[times] Y
0010 [sqrt]
0011 DSE Z
0012 BACK 006
0013 [cmplx]ENTER
0014 x[^2]
0015 [times]
0016 [^3][sqrt]
0017 # 027
0018 [times]
0019 RCL Y
0020 STO+ X
0021 RCL+ T
0022 STO+ X
0023 STO+ X
0024 -
0025 # 015
0026 /
0027 END

 1 A -> 3.141460911773498978633977995517088 ; (27*(a^2*b)^(1/3) - 4*(2*a + b))/15
  Rv -> 2.999999999999999999999999999999999 ; a, perimeter of the inscribed hexagon ( 3 )
  Rv -> 3.464101615137754587054892683011744 ; b, perimeter of the circumscribed hexagon ( √12 )

 5 A -> 3.141592653583662847516781540551053 ; (27*(a^2*b)^(1/3) - 4*(2*a + b))/15
  Rv -> 3.141031950890509638111352926459658 ; a, perimeter of the inscribed 96-gon
  Rv -> 3.142714599645368298168859093772122 ; b, perimeter of the circumscribed 96-gon

17 A -> 3.141592653589793238462643383279503 ; (27*(a^2*b)^(1/3) - 4*(2*a + b))/15
  Rv -> 3.141592653556370963662823316554114 ; a, perimeter of the inscribed 196608-gon
  Rv -> 3.141592653656637788064203581586042 ; b, perimeter of the circumscribed 196608-gon

--------

HP-42S/Free42:

00 { 68-Byte Prgm }
01▸LBL "PI"
02 27
03 SQRT
04 6.75
05 SQRT
06▸LBL 00
07 R↓
08 RCL× ST T
09 STO+ ST X
10 R↑
11 RCL+ ST L
12 STO÷ ST Y
13 X<> ST L
14 RCL× ST Y
15 SQRT
16 DSE ST Z
17 GTO 00
18 STO ST Z
19 X↑2
20 RCL× ST Y
21 3
22 1/X
23 Y↑X
24 27
25 ×
26 R↑
27 STO+ ST X
28 RCL+ ST Z
29 STO+ ST X
30 STO+ ST X
31 -
32 15
33 ÷
34 .END.

 1 XEQ PI -> X: 3.141460911773498978633977995517088

 R↓       -> Y: 3
          -> X: 3.464101615137754587054892683011745


17 XEQ PI -> X: 3.141592653589793238462643383279505

 R↓       -> Y: 3.141592653556370963662823316554116
          -> X: 3.141592653656637788064203581586044

--------

HP 50g:

5

« '3/2*√3' '3*√3' → n a b
  « 1 n
    START
      '2*a*b/(a+b)' →NUM 'b' STO
      '√(a*b)' →NUM 'a' STO
    NEXT     
    a b '(27*(a^2*b)^(1/3)-4*(2*a+b))/15' EVAL
  »
»

EVAL ->

3:    3.14103195089
2:    3.14271459965
1:    3.14159265358

--------

Finally, a stack-only wp34s version that preserves the original X-register content:

0001 **LBL A
0002 # 027
0003 [sqrt]
0004 # 1/2
0005 RCL[times] Y
0006 ||
0007 STO+ X
0008 RCL L
0009 RCL[times] Y
0010 [sqrt]
0011 DSE Z
0012 BACK 006
0013 STO Z
0014 x[^2]
0015 RCL[times] Y
0016 [^3][sqrt]
0017 STO L
0018 CLx
0019 # 027
0020 STO[times] L
0021 x[<->] Z
0022 z[<->] L
0023 STO L
0024 STO+ L
0025 x[<->] Y
0026 STO+ L
0027 x[<->] L
0028 STO+ X
0029 STO+ X
0030 STO- Z
0031 CLx
0032 # 015
0033 STO/ Z
0034 x[<->] L
0035 x[<->] Z
0036 END

314 ENTER 5 A -> 3.141592653583662847516781540551053
           Rv -> 3.141031950890509638111352926459658
           Rv -> 3.142714599645368298168859093772122
           Rv -> 314

--------



(03-22-2019, 04:39 PM) PPPPS: At least one more step can be saved in the second wp34S program:

--------

0001 **LBL A
0002 # 027
0003 [sqrt]
0004 # 1/2
0005 RCL[times] Y
0006 ||
0007 STO+ X
0008 RCL L
0009 RCL[times] Y
0010 [sqrt]
0011 DSE Z
0012 BACK 006
0013 STO Z
0014 x[<->] L
0015 RCL[times] Y
0016 [^3][sqrt]
0017 STO L
0018 CLx
0019 # 027
0020 STO[times] L
0021 [<->] ZYZT
0022 STO+ Z
0023 [<->] YZXT
0024 STO+ Y
0025 x[<->] L
0026 [<->] YZXT
0027 STO+ X
0028 STO+ X
0029 STO- Z
0030 CLx
0031 # 015
0032 STO/ Z
0033 x[<->] L
0034 x[<->] Z
0035 END

314 ENTER 5 A -> 3.141592653583662847516781540551053
           Rv -> 3.141031950890509638111352926459658
           Rv -> 3.142714599645368298168859093772122
           Rv -> 314

--------
Find all posts by this user
Quote this message in a reply
Post Reply 


Messages In This Thread
Happy Pi day everyone!! - Namir - 03-14-2019, 12:25 PM
RE: Happy Pi day everyone!! - ttw - 03-14-2019, 12:34 PM
RE: Happy Pi day everyone!! - Dieter - 03-14-2019, 08:09 PM
RE: Happy Pi day everyone!! - Gerson W. Barbosa - 03-17-2019 01:48 AM
RE: Happy Pi day everyone!! - Thomas Klemm - 03-14-2019, 10:12 PM
RE: Happy Pi day everyone!! - DA74254 - 03-14-2019, 10:34 PM
RE: Happy Pi day everyone!! - mpark - 03-15-2019, 05:11 PM
RE: Happy Pi day everyone!! - EdS2 - 03-16-2019, 07:50 AM
RE: Happy Pi day everyone!! - Carsen - 03-15-2019, 04:31 AM
RE: Happy Pi day everyone!! - Carsen - 03-16-2019, 06:27 AM
RE: Happy Pi day everyone!! - Thomas Okken - 03-17-2019, 12:38 AM
RE: Happy Pi day everyone!! - Thomas Klemm - 03-16-2019, 03:18 PM
RE: Happy Pi day everyone!! - EdS2 - 03-18-2019, 08:07 AM
RE: Happy Pi day everyone!! - ttw - 03-16-2019, 04:23 PM
RE: Happy Pi day everyone!! - Thomas Klemm - 03-16-2019, 05:11 PM
RE: Happy Pi day everyone!! - Thomas Klemm - 03-16-2019, 06:14 PM
RE: Happy Pi day everyone!! - ttw - 03-17-2019, 12:56 AM
RE: Happy Pi day everyone!! - Thomas Klemm - 03-18-2019, 05:40 PM



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