Bions

# Bi-ons = Complexified Anions for the HP-41

Overview

0°)  M-Code Routines
1°)  Multiplication

a)  General Case
b)  Bi-ons with proportional imaginary parts ( focal program & M-code routine B*B1 )

2°)  Miscellaneous Functions + 2 M-Code routines:  Z*B & Z*IMB
3°)  Polynomials with complex coefficients
4°)  Bionic Equations F(b) = b

-In "Anions for the HP-41", we have used the Cayley-Dickson formula

( a , b ) ( c , d ) = ( a c - d* b , d a + b c* )       where   * = conjugate

to construct the complexes from the real numbers, regarding a complex as a pair of real numbers,
and then the quaternions from the complexes, the octonions from the quaternions, the sedenions from the octonions,
the 32-ons from the sedenions, the 64-ons from the 32-ons ... and so on ... for the 2^n-ons

-But if we start with the complexes, we gradually get the bi-complexes, bi-quaternions, bi-octonions, bi-sedenions ...

-The programs listed in this page calculate elementary functions of these "bi-ons"

0°)  M-Code Routines

-Unfortunately, I've not found a good way to avoid using M-code routines, especially to compute complex functions, namely:

Z*Z  Z^2  SQRTZ  1/Z  Z/Z   Z+Z         cf "A few M-Code Routines for the HP-41"

and also  X+1   SINH   COSH                  -------------------------------------------

-Several M-Code routines that are useful for anions may also be employed for bi-ons:

A+A  A-A  ST*A  ST/A  AMOVE  ASWAP   cf "Anions" and "Anionic Functions for the HP-41"

-Of course, you can use your own routines, provided  Z*Z  does not alter synthetic register Q

1°)  Multiplication

a)  General Case

-This program employs the Cayley-Dickson formula recursively.
-Unfortunately, there are not enough registers for bi-64-ons.

-The 2n components of the 1st bion are to be sored into R01-R02 , R03-R04 , ............... , R2n-1-R2n   ( 2 real numbers for each bj )
-Likewise for the 2n components of the 2nd bion into  R2n+1-R2n+2 , ............................ , R4n-1-R4n   ( 2 real numbers for each b'j )

b = b0 + b1 e1 + ............... + bn-1 en-1
b' = b'0 + b'1 e1 + ............... + b'n-1 en-1

-"B*B" does not use any M-Code routine !

Data Registers:           •  R00 = 2n ( 4 , 8 , 16 , 32 or 64 )                  ( Registers R00 thru R4n are to be initialized before executing "B*B" )

•  R01   ......  •  R2n = the components of the 1st bi-ion
•  R2n+1 ....  •  R4n = the components of the 2nd bi-ion

>>>  When the program stops:     R01   ......  R2n = the 2n components of the product

-During the calculations,

R01 to R04 = bicomplex1    R09 to R16 = biquaternion1  R25 to R40 = bioctonion1  R57 to R88 = bisedenion1     R121 to R184 = bi-32-on1
R05 to R08 = bicomplex2    R17 to R24 = biquaternion2  R41 to R56 = bioctonion2  R89 to R120 = bisedenion2   R185 to R248 = bi-32-on2

Flags: /
Subroutines:  /

 01  LBL "B*B"   02  RCL 00   03  ST+ X   04  .1   05  %   06  +   07  7   08  -   09   E3   10  /   11  1   12  +   13  REGMOVE   14  XEQ 01   15  RCL 00   16   E3   17  /   18  ISG X   19  STO Y   20   E3   21  /   22  RCL 00   23  ST+ X   24  +   25  7   26  -   27  REGMOVE   28  X<>Y   29  RTN   30  LBL 01   31  2   32  ST/ 00   33  RCL 00   34  X#Y?   35  GTO 02   36  RCL 01   37  RCL 05   38  *   39  RCL 02   40  RCL 06   41  *   42  -   43  RCL 03   44  RCL 07   45  *   46  -   47  RCL 04   48  RCL 08 49  *   50  +   51  STO M   52  RCL 01   53  RCL 06   54  *   55  RCL 02   56  RCL 05   57  *   58  +   59  RCL 03   60  RCL 08   61  *   62  -   63  RCL 04         64  RCL 07   65  *   66  -   67  RCL 01   68  RCL 07   69  *   70  RCL 02   71  RCL 08   72  *   73  -   74  RCL 03   75  RCL 05   76  *   77  +   78  RCL 04   79  RCL 06   80  *   81  -   82  X<> 03   83  RCL 06   84  *   85  RCL 01   86  RCL 08   87  *   88  +   89  RCL 02   90  RCL 07   91  *   92  +   93  RCL 04   94  RCL 05   95  *   96  + 97  STO 04   98  X<>Y   99  STO 02 100  CLX 101  X<> M 102  STO 01 103  RCL 00 104  ST+ 00 105  RTN 106  LBL 02 107  RCL 00 108   E3 109  / 110  RCL 00 111  ST+ X 112  + 113  STO Y 114  7 115  - 116   E3 117  / 118  RCL 00 119  4 120  * 121  + 122  7 123  - 124  REGMOVE 125  + 126  REGMOVE 127  XEQ 01 128  RCL 00 129   E3 130  / 131  RCL 00 132  4 133  * 134  + 135  7 136  - 137   E3 138  / 139  RCL 00 140  ST+ X 141  + 142  7 143  - 144  REGSWAP 145  RCL 00 146   E3 147  / 148  - 149  REGMOVE 150  LASTX 151  - 152  RCL 00 153  5 154  * 155  + 156  REGMOVE 157  XEQ 01 158  RCL 00 159   E3 160  / 161  RCL 00 162  7 163  * 164  + 165  7 166  - 167   E3 168  / 169  RCL 00 170  ST+ X 171  + 172  7 173  - 174  ENTER^ 175  REGSWAP 176  SIGN 177  ST+ Y 178  CHS 179  ST* IND L 180  ST* IND Y 181  LASTX 182  RCL 00 183  2.996 184  * 185  + 186  REGMOVE 187  XEQ 01 188  RCL 00 189  3 190  * 191  8 192  - 193  RCL 00 194  ST+ X 195  LASTX 196  - 197   E3 198  / 199  + 200  RCL 00 201  5 202  * 203  8 204  - 205  STO Z 206  ISG Z 207  LBL 03 208  RCL IND Y 209  ST+ IND Y 210  RDN 211  DSE X 212  DSE Y 213  GTO 03 214  X<> Z 215  RCL 00 216   E3 217  / 218  RCL 00 219  ST+ X 220  + 221  7 222  - 223   E3 224  / 225  + 226  REGMOVE 227  RCL 00 228  .1 229  % 230  + 231  + 232  REGMOVE 233  FRC 234   E3 235  * 236  ENTER^ 237  SIGN 238  ST+ Y 239  CHS 240  ST* IND L 241  ST* IND Y 242  XEQ 01 243  RCL 00 244  3 245  * 246  8 247  - 248  RCL 00 249  ST+ X 250  LASTX 251  - 252   E3 253  / 254  + 255  RCL 00 256  8 257  ST* Y 258  - 259  LBL 04 260  RCL IND Y 261  ST- IND Y 262  RDN 263  DSE X 264  DSE Y 265  GTO 04 266  RCL 00 267   E3 268  / 269  RCL 00 270  5 271  * 272  + 273  7 274  - 275   E3 276  / 277  RCL 00 278  7 279  * 280  + 281  7 282  - 283  REGMOVE 284  RCL 00 285  ST+ 00 286  RTN 287  END

( 378 bytes / SIZE 8n-7 )

 STACK INPUT OUTPUT X / 1.2n

where  1.2n  is the control number of the result.

Example:   Find the product of the bisedenions:

b = ( 25 + 108 i ) + ( 105 + 113 i ) e1 + ( 48 + 3 i ) e2 + ( 123 + 65 i ) e3 + ( 45 + 11 i ) e4 + ( 58 + 20 i ) e5 + ( 34 + 84 i ) e6 + ( 38 + 117 i ) e7
+ ( 81 + 46 i ) e8 + ( 52 + 36 i ) e9 + ( 35 + 125 i ) e10 + ( 16 + i ) e11 + ( 41 + 109 i ) e12 + ( 15 + 91 i ) e13 + ( 63 + 94 i ) e14 + ( 55 + 28 i ) e15

b' = ( 100 + 39 i ) + ( 27 + 59 i ) e1 + ( 61 + 12 i ) e2 + ( 99 + 129 i ) e3 + ( 49 + 44 i ) e4 + ( 101 + 80 i ) e5 + ( 5 + 74 i ) e6 + ( 21 + 75 i ) e7
+ ( 62 + 53 i ) e8  + ( 77 + 13 i ) e9 + ( 9 + 107 i ) e10 + ( 64 + 4 i ) e11 + ( 33 + 43 i ) e12 + ( 60 + 102 i ) e13 + ( 121 + 114 i ) e14 + ( 89 + 112 i ) e15

-You can use the short routine below to store these coefficients into R01 thru R64

 01  1.064  02  7  03  LBL 01  04  41   05  *  06  131  07  MOD  08  STO IND Y  09  ISG Y  10  GTO 01  11  RTN

-Bisedenions so n = 16 and 2n = 32  STO 00

-SIZE 121 at least

XEQ "B*B"  >>>>  1.032             in about 6 minutes

-And we get   R01 = 22450  R02 = -93103  .......................  R31 = -14895  R32 = 36483

-Thus,

b.b' = ( 22450 - 93103 i ) + ( -3665 + 12974 i ) e1 + ( 32291 - 31812 i ) e2 + ( 18482 + 29668 i ) e3 + ( -7840 + 8985 i ) e4 + ( 1001 + 48348 i ) e5
+ ( -10494 + 6090 i ) e6 + ( -1657 + 25709 i ) e7 + ( -14243 - 595 i ) e8  + ( 9295 + 1562 i ) e9 + ( -19125 + 35197 i ) e10 + ( 18449 - 20036 i ) e11
+ ( -3315 + 35478 i ) e12 + ( -22176 + 9676 i ) e13 + ( 11818 + 23190 i ) e14 + ( -14895 + 36483 i ) e15

Note:

-The product of 2 bi-32-ons should last about 24 minutes.

b)  Bi-ons with proportional imaginary parts

-Fortunately, the formulas are much simpler if the 2 bi-ons have the same imaginary direction, I mean if, given  b & b'

b = b0 + b1 e1 + ............... + bn-1 en-1
b' = b'0 + b'1 e1 + ............... + b'n-1 en-1

there exist a complex number c such that, for all  i > 0 ,  b'i = c bi  or  bi = c b'i

-The program hereunder is useful in this case, and it uses only 4n+1 registers

Data Registers:           •  R00 = 2n > 3                                   ( Registers R00 thru R4n are to be initialized before executing "B*B1" )

•  R01   ......  •  R2n = the n components of the 1st bi-on
•  R2n+1 ....  •  R4n = the n components of the 2nd bi-on

>>>  When the program stops:     R01   ......  R2n = the n components of the product,   R2n+1  ........ R4n  are unchanged.

Flags: /
Subroutine:  Z*Z

 01  LBL "B*B1"  02  RCL 00  03  .002  04  +  05  STO M  06  RCL 00  07  2  08  +  09  RCL IND X  10  DSE Y  11  RCL IND Y  12  RCL 02  13  RCL 01  14  Z*Z  15  STO N 16  X<>Y  17  STO O  18  LBL 01  19  RCL IND M  20  DSE M  21  RCL IND M  22  RCL 00  23  2  24  +  25  SIGN  26  CLX  27  RCL IND L  28  DSE L  29  RCL IND L  30  Z*Z 31  STO P  32  RDN  33  STO Q  34  CLX  35  RCL M  36  RCL 00  37  +  38  SIGN  39  ST+ L  40  CLX  41  RCL IND L  42  DSE L  43  RCL IND L  44  R^  45  R^ 46  Z*Z  47  ST- N  48  RDN  49  ST- O  50  CLX  51  RCL 02  52  RCL 01  53  Z*Z  54  RCL P  55  +  56  STO IND M  57  RCL M  58  X+1  59  RCL Z  60  RCL Q 61  +  62  STO IND Y  63  DSE M  64  GTO 01  65  RCL N  66  STO 01  67  RCL O  68  STO 02  69  RCL 00  70   E3  71  /  72  ISG X  73  CLA  74  END

( 124 bytes / SIZE 4n+1 )

 STACK INPUT OUTPUT X / 1.2n

where  1.2n  is the control number of the product.

Example:   Find the product of the biquaternions

b = ( 6 - 9 i ) + ( -4 + 2 i ) e1 + ( -3 + i ) e2 + ( -4 + 7 i ) e3                            here,   Im(b') = ( 2 + 3i ) Im(b)
b' = ( 4 + 7 i ) + ( -14 - 8 i ) e1 + ( -9 - 7 i ) e2 + ( -29 + 2 i ) e3

-> biquaternions, so  8  STO 00

-Store the coefficients into R01 thru R16

6  STO 01   -9  STO 02   -4  STO 03   2  STO 04  ..........................  -29  STO 15    2  STO 16

XEQ "B*B1"  >>>>  1.008                 ---Execution time = 6 seconds---

R01 = -121    R02 = 201
R03 = -186    R04 =  58
R05 = -136    R06 =  22
R07 = -221    R08 = 273

-Thus,  b b' = ( -121 + 201 i ) + ( -186 + 58 i ) e1 + ( -136 + 22 i ) e2 + ( -221 + 273 i ) e3

Notes:

-"B*B1" does not check that the imaginary parts are proportional.
-This routine uses the synthetic registers M , N , O , P & Q
-Most of the "bionic" functions deal with such hypercomplexes and "B*B1" is sufficient.

-So, an M-code routine is quite useful and will be much faster:

Initialization

-This routine is alread listed in "Anions for the HP-41"
-Please take a look at this page for more details.

260  SETHEX                   @EFC8  in my ROM
378  C=c
03C  RCR 3
106  A=C S&X
130  LDI S&X
200  200h                           correct value for an HP-41CV/CX or an HP-41C with a QUAD memory module
306  ?A<C S&X
381  ?NCGO
00A  NEXIST
0A6  A<>C S&X
270   RAMSELECT
38D  ?NCXQ
008   N->S&X
2E6  ?C#0 S&X
0B5  ?NCGO
0A2  ERROR
05A  C=0 M
23A  C=C+1 M
106  A=C S&X
1BC  RCR 11
0A6  A<>C S&X
1E6  C=C+C S&X
10E  A=C ALL
378  C=c
03C  RCR 3
0E6  B<>C S&X
378  C=c
0C6  C=B S&X
1BC  RCR 11
0C6  C=B S&X
20E  C=A+C ALL
24C  ?FSET 9
013  JNC+02
03C  RCR 3
070  N=C ALL
10E  A=C ALL
130  LDI S&X
200  200h
306  ?A<C S&X
381  ?NCGO
00A  NEXIST
3E0  RTN                        @EFF2  in my ROM

( 43 words )

-To call this subroutine:    ?NCXQ  EFC8  =  321   3BC    in my ROM
-Change these 2 words if you have loaded this routine at another address...

Multiplication Routine:

- B*B1 below does the same calculations as "B*B1" above

0B1  "1"
002   "B"
02A  "*"
002   "B"
244   CLRF 9
321   ?NCXQ                   executes the initialization
3BC  EFC8                       routine above
378   C=c
03C  RCR 3
226   C=C+1 S&X
226   C=C+1 S&X
226   C=C+1 S&X
106   A=C S&X
0B0  C=N ALL
306   ?A<C S&X
0B5   ?NCGO
0A2   DATAERROR         There will be a DATA ERROR message if  R00 = 2n < 4
03C   RCR 3
106   A=C S&X
17C  RCR 6
0A6  A<>C S&X
226   C=C+1 S&X
226   C=C+1 S&X
0BC  RCR 5
070   N=C ALL
27C  RCR 9
10E  A=C ALL
270  RAMSLCT
0AE  A<>C ALL
266   C=C-1 S&X
270  RAMSLCT
0EE  B<>C ALL
046  C=0 S&X
270  RAMSLCT
0EE  B<>C ALL
068  Z=C
0AE A<>C ALL
028  T=C
0B0  C=N ALL
17C  RCR 6
270  RAMSLCT
10E  A=C ALL
0B0  C=N ALL
17C  RCR 6
226  C=C+1 S&X
270  RAMSLCT
0EE  B<>C ALL
046  C=0 S&X
270  RAMSLCT
0EE  B<>C ALL
0A8  Y=C
0AE  A<>C ALL
0E8  X=C
0B0  C=N ALL
268   Q=C
259   ?NCXQ            The 1st executable word of my Z*Z routine is @F696 in my ROM
3D8   Z*Z                  Change these 2 words according to your own ROM
0F8   C=X
168   M=C
0B8  C=Y                  Here, M and N are synthetic registers ( not CPU registers )
1A8  N=C
278  C=Q
070  N=C ALL
260  SETHEX
0B0  C=N ALL          LOOP    @FD79 in my ROM
03C  RCR 3
10E  A=C ALL
270  RAMSLCT
0AE  A<>C ALL
266  C=C-1 S&X
270  RAMSLCT
0EE  B<>C ALL
046  C=0 S&X
270  RAMSLCT
0EE  B<>C ALL
068  Z=C
0AE  A<>C ALL
028  T=C
0B0  C=N ALL
27C  RCR 9
10E  A=C ALL
270  RAMSLCT
0AE  A<>C ALL
266  C=C-1 S&X
270  RAMSLCT
0EE  B<>C ALL
046  C=0 S&X
270  RAMSLCT
0EE  B<>C ALL
0E8  X=C
0AE  A<>C ALL
0A8  Y=C
0B0  C=N ALL
268  Q=C
259   ?NCXQ            The 1st executable word of my Z*Z routine is @F696 in my ROM
3D8   Z*Z                  Change these 2 words according to your own ROM
0F8  C=X
1E8  O=C
0B8  C=Y
228   P=C
046  C
270  =
038  T
0A8  Y=C
078  C=Z
0E8  X=C
278  C=Q
070  N=C ALL
10E  A=C ALL
270  RAMSLCT
0AE  A<>C ALL
260  SETHEX
266  C=C-1 S&X
270  RAMSLCT
0EE  B<>C ALL
046  C=0 S&X
270  RAMSLCT
0EE  B<>C ALL
068  Z=C
0AE  A<>C ALL
028   T=C
259   ?NCXQ            The 1st executable word of my Z*Z routine is @F696 in my ROM
3D8   Z*Z                  Change these 2 words according to your own ROM
0F8  C=X
2BE  C=-C
10E  A=C ALL
178  C=M
01D  C=
060  A+C
168  M=C
0B8  C=Y
2BE  C=-C
10E  A=C ALL
1B8  C=N
01D  C=
060  A+C
1A8  N=C
278  C=Q
070  N=C ALL
17C  RCR 6
10E  A=C ALL
270  RAMSLCT
0AE A<>C ALL
260  SETHEX
226  C=C+1 S&X
270  RAMSLCT
0EE  B<>C ALL
046  C=0 S&X
270  RAMSLCT
0EE  B<>C ALL
0A8  Y=C
0AE  A<>C ALL
0E8  X=C
259   ?NCXQ            The 1st executable word of my Z*Z routine is @F696 in my ROM
3D8   Z*Z                  Change these 2 words according to your own ROM
0B8  C=Y
10E  A=C ALL
238  C=P
01D  C=
060  A+C
10E  A=C ALL
278  C=Q
03C  RCR 3
070  N=C ALL
270  RAMSLCT
0AE A<>C ALL
2F0  WRITDATA
046  C=0 S&X
270  RAMSLCT
0F8  C=X
10E  A=C ALL
1F8  C=O
01D  C=
060  A+C
10E  A=C ALL
0B0  C=N ALL
260  SETHEX
266  C=C-1 S&X
270  RAMSLCT
0AE  A<>C ALL
2F0  WRITDATA
0B0  C=N ALL
266  C=C-1 S&X
266  C=C-1 S&X
1BC  RCR 11
266  C=C-1 S&X
266  C=C-1 S&X
070  N=C ALL
106  A=C S&X
27C  RCR 9
226  C=C+1 S&X
306  ?A<C S&X
1E5   ?NCXQ              GOTO LOOP @FD79 in my ROM
3F6   FD79                  Change these 2 words according to your own ROM
046  C=0 S&X
270  RAMSLCT
1B8  C=N
10E  A=C ALL
178  C=M
0EE  B<>C ALL
0B0  C=N ALL
17C  RCR 6
270  RAMSLCT
0EE  B<>C ALL
2F0  WRITDATA
0EE  B<>C ALL
226  C=C+1 S&X
270  RAMSLCT
0AE A<>C ALL
2F0  WRITDATA
0B0  C=N ALL
17C  RCR 6
266  C=C-1 S&X
270  RAMSLCT
2A0  SETDEC
266  C=C-1 S&X
266  C=C-1 S&X
266  C=C-1 S&X
10E  A=C ALL
046  C=0 S&X
270  RAMSLCT
04E  C
35C  =
050   1
01D  C=
060  A+C
0E8  X=C
345  ?NCGO
042    CLA

( 242 words )

 STACK INPUT OUTPUT X / 1.2n

where  1.2n  is the control number of the product.

Note:

-The product of 2 bisedenions ( 2n = 32 ) is about 7 seconds

2°)  Miscellaneous Functions

-These programs compute elementary functions of a "bi-on":

•  "1/B"    inverse

B-1 = B* / | B |2    where B* is the conjugate of  B   and   | B |2 = b02 + b12 + ................. + bN-12

-Note that here  | B |  may equal 0 even if b # 0 since the components bj are complexes !
-So, b # 0 may not have an inverse !

•  "E^B"   exponential

exp( b0 + b1 e1 + .... + bN-1 bN-1 ) = eb0 [ cos µ + ( sin µ ). I ]

where  µ = ( b12 + ............... + bN-12 )1/2    and    I = ( b1 e1 + ............. + bN-1 eN-1 ) / µ

•   "LNB"  natural logarithm

Ln( b0 + b1 e1 + .... + bN-1 bN-1 )   = Ln ( b02 + b12 + ................. + bN-12 )1/2 + A(µ,b0). I

where  µ = ( b12 + ............... + bN-12 )1/2    and    I = ( b1 e1 + ............. + bN-1 eN-1 ) / µ

>>> Here,  A(µ,b0) generalizes the ATAN2 function to complexes:

-We have to solve  Sin Z = µ / ( µ2 + b02 )1/2  ,  Cos Z = b0 / ( µ2 + b02 )1/2

it yields  Z = A(µ,b0) = - i Ln ( b0 + i µ ) / ( µ2 + b02 )1/2

>>>  If µ = 0  and  Im(b) # 0 ,  Ln b = Ln b0 + ( b1 e1 + ............. + bN-1 eN-1 ) / b0    ( if  b0 = 0 , Ln b  does not exist )
>>>  If µ = 0  and  Im(b) = 0 ,  Ln b = Ln b0

•  "B^X"  raising a bion to a real power         B^X = exp ( X Ln B )

•  "X^B"  raising a real to a bionic power       X^B = exp ( B Ln X )

•  "B^Z"  raising a bion to a complex power         B^Z = exp ( Z Ln B )

•  "Z*B"  multiplies a bi-on by the complex x + i.y

•  "SHB"  hyperbolic sine

Sinh b = ( exp(b) - exp(-b) ) / 2

•  "CHB"  hyperbolic cosine

Cosh b = ( exp(b) + exp(-b) ) / 2

•  "THB"  hyperbolic tangent

Tanh b = ( exp(2b) - 1 ) ( exp(2b) + 1 ) -1

•  "ASHB"  arc sinh b = Ln [ b + ( b2 + 1 )1/2 ]

•  "ACHB"  arc cosh b = Ln [ b + ( b2 - 1 )1/2 ]

•  "ATHB"   arc tanh b = (1/2) [ Ln ( 1 + b ) - Ln ( 1 - b ) ]

•  "SINB"   sine

Sin b = ( exp(i.b) - exp(-i.b) ) / 2.i

•  "COSB"  cosine

Cos b = ( exp(i.b) + exp(-i.b) ) / 2

•  "TANB"    Tan b = - i Tanh ( i.b )

•  "ASINB"    arc sin b

Arc Sin b     = - i  Arc Sinh ( i.b )

•  "ACOSB"  arc cos b

Arc Cos b = PI/2 - Arc Sin b

•  "ATANB"  arc tan b

Arc Tan b     = - i  Arc Tanh ( i.b )

Remark:

-I've used     arc cosh b = Ln [ b + ( b2 - 1 )1/2 ]

instead of the standard definition    Arc Cosh b  = Ln [ b + ( b + 1 )1/2 ( b - 1 )1/2 ]

-So, "ACHB" may give a result that requires a sign change to get the principal value of  Arc Cosh b.
-See the notes below if you prefer the standard definition.

Data Registers:           •  R00 = 2n ( 4 , 8 , .... , 128 or 256 )    ( Registers R00 thru R2n are to be initialized before executing these programs )

•  R01   ......  •  R2n = the components of the bi-on

( In several cases,             R2n+1 ..........  R4n  are used for temporary data storage )

>>>  When the program stops:     R01   ......  R2n = the components of the result

Flag:  F01  ( sometimes )
Subroutines:   ST*A  ST/A  AMOVE  ASWAP  A+A  A-A  B*B1  Z+Z  Z*Z  Z/Z  SQRTZ

-Line 340 is a three-byte  GTO 03

 01  LBL "X^B"   02  LN   03  ST*A   04  GTO 03   05  LBL "B^X"   06  LBL 06   07  STO O   08  RCL 00   09  0   10  LBL 10   11  RCL IND Y   12  ABS   13  +   14  DSE Y   15  GTO 10   16  X#0?   17  GTO 00   18  RCL O   19  X#0?   20  GTO 16   21  SIGN   22  STO 01   23  GTO 16   24  LBL 00   25  XEQ 05   26  X<>Y   27  ST*A   28  LBL E^B"   29  LBL 03   30  XEQ 12   31  STO M   32  R-D   33  1   34  P-R   35  RCL Z   36  STO N   37  SINH   38  *   39  X<> Z   40  COSH   41  *   42  RCL N   43  RCL M   44  X=Y?   45  X#0?   46  GTO 00   47  SIGN   48  STO Z   49  LBL 00   50  Z/Z   51  RCL 02              52  R-D   53  RCL 01 54  E^X   55  P-R   56  Z*Z   57  .002   58  XEQ 14   59  RCL M   60  R-D   61  1   62  P-R   63  RCL N   64  COSH   65  *   66  X<>Y   67  RCL N   68  SINH   69  *   70  CHS   71  X<>Y   72  RCL 02   73  R-D   74  RCL 01   75  E^X   76  P-R   77  Z*Z   78  STO 01   79  X<>Y   80  STO 02   81  GTO 16  82  LBL "ACOSB"   83  XEQ 00   84  PI   85  2   86  /   87  ST- 01   88  SIGN   89  CHS   90  ST*A   91  X<>Y   92  RTN   93  LBL "ASINB"   94  LBL 00   95  XEQ 08   96  XEQ 02   97  XEQ 08   98  SIGN   99  CHS 100  ST*A 101  X<>Y 102  RTN 103  LBL "ASHB"   104  LBL 02 105  CF 01 106  GTO 00 107  LBL "ACHB" 108  SF 01 109  LBL 00 110  12 111  AMOVE 112  XEQ "B*B1" 113  SIGN 114  FS? 01 115  CHS 116  ST+ 01 117  .5 118  XEQ 06 119  A+A 120  LBL "LNB" 121  LBL 05 122  DEG 123  RCL 00 124  .002 125  + 126  0 127  LBL 01 128  RCL IND Y 129  X^2 130  + 131  DSE Y 132  GTO 01 133  X=0? 134  GTO 04 135  XEQ 12 136  STO M 137  X^2 138  X<>Y 139  STO P 140  X^2 141  + 142  X#0? 143  GTO 00 144  RCL 02 145  RCL 01 146  1/Z 147  GTO 02 148  LBL 00 149  CLX 150  RCL 02 151  RCL 01 152  Z^2 153  Z+Z 154  SQRTZ 155  X<> 01 156  X<>Y 157  X<> 02            158  RCL M 159  + 160  X<>Y 161  RCL P 162  - 163  RCL 02 164  RCL 01 165  Z/Z 166  R-P 167  LN 168  CHS 169  X<>Y 170  D-R 171  RCL P 172  RCL M 173  Z/Z 174  LBL 02 175  .002 176  XEQ 14 177  LBL 04 178  RCL 02 179  RCL 01 180  R-P 181  LN 182  STO 01 183  X<>Y 184  D-R 185  STO 02 186  GTO 16 187  LBL "1/B" 188  LBL 07 189  1 190  CHS 191  ST*A 192  ST* 01 193  ST* 02 194  XEQ 12 195  RDN 196  CLX 197  RCL 02 198  RCL 01 199  Z^2 200  Z+Z 201  1/Z 202  0 203  XEQ 14 204  GTO 16 205  LBL "SINB" 206  CF 01 207  GTO 00 208  LBL "COSB"   209  SF 01 210  LBL 00 211  XEQ 08 212  XEQ 00 213  FS? 01 214  RTN 215  XEQ 08 216  SIGN 217  CHS 218  ST*A 219  X<>Y 220  RTN 221  LBL "SHB" 222  CF 01 223  GTO 00 224  LBL "CHB" 225  SF 01 226  LBL 00 227  12 228  AMOVE 229  SIGN 230  CHS 231  ST*A 232  XEQ 03 233  12 234  ASWAP 235  XEQ 03 236  FC? 01 237  A-A 238  FS? 01 239  A+A 240  2 241  ST/A 242  X<>Y 243  RTN 244  LBL 08 245  RCL 00 246  LBL 09 247  ENTER^ 248  SIGN 249  ST- L 250  CLX 251  RCL IND L 252  X<> IND Y 253  CHS 254  STO IND L 255  RDN 256  X<> L 257  DSE X 258  GTO 09 259  RTN 260  LBL "TANB" 261  CF 01 262  GTO 00 263  LBL "ATANB" 264  SF 01 265  LBL 00 266  XEQ 08 267  FC? 01 268  XEQ 02 269  FS? 01 270  XEQ 04 271  XEQ 08 272  SIGN 273  CHS 274  ST*A 275  X<>Y 276  RTN 277  LBL "THB" 278  LBL 02 279  2 280  ST*A 281  XEQ 03 282  12 283  AMOVE 284  1 285  ST- 01 286  12 287  ASWAP 288  SIGN 289  ST+ 01 290  XEQ 07 291  XEQ "B*B1" 292  RTN 293  LBL "ATHB" 294  LBL 04 295  12 296  AMOVE 297  SIGN 298  CHS 299  ST*A 300  ST- 01 301  XEQ 05 302  12 303  ASWAP 304  SIGN 305  ST+ 01 306  XEQ 05 307  A-A 308  2 309  ST/A 310  X<>Y 311  RTN 312  LBL 12 313  DEG 314  RCL 00            315  .002 316  + 317  STO M 318  CLST 319  LBL 11 320  RCL IND M 321  DSE M 322  RCL IND M 323  Z^2 324  Z+Z 325  DSE M 326  GTO 11 327  X<>Y 328  STO T 329  X<>Y 330  STO Z 331  SQRTZ 332  RTN 333  LBL "B^Z" 334  STO O 335  X<>Y 336  STO N 337  XEQ 05 338  RDN 339  XEQ 00 340  GTO 03 341  LBL 00 342  LBL "Z*B" 343  0 344  LBL 14 345  RCL 00 346  + 347  STO P 348  LBL 13 349  CLX 350  RCL IND P 351  DSE P 352  RCL IND P 353  Z*Z 354  STO IND P 355  CLX 356  RCL P 357  X+1 358  RDN 359  STO IND T 360  DSE P 361  GTO 13 362  RTN 363  LBL 16 364  RCL N 365  RCL O 366  RCL 00            367   E3 368  / 369  ISG X 370  CLA 371  END

( 728 bytes / SIZE 2n+1 or 4n+1 )

 STACK INPUT OUTPUT X / 1.2n

where   1.2n   is the control number of the result.

Exceptions:

-For "B^X" or "X^B" , place x in register X
-For "B^Z"  or "Z*B" , place x in register X and y in register Y  ( z = x + i y )

Examples:   With the biquaternion  b = ( 1 + 0.9 i ) + ( 0.8 + 0.7 i ) e1 + ( 0.6 + 0.5 i ) e2 + ( 0.4 + 0.3 i ) e3

>>>  Biquaternion, so   2n = 8  STO 00

>>>  1  STO 01   0.9  STO 02   0.8  STO 03   0.7  STO 04   0.6  STO 05   0.5  STO 06   0.4  STO 07   0.3  STO 08

-Register R00 is unchanged, but you'll have to store again b in R01 thru R08 after each example.

•  XEQ "1/B"  >>>  1.008    and we find in registers  R01 thru  R08:

1/b = ( 0.2710 - 0.2285 i ) + ( -0.2115 + 0.1835 i ) e1 + ( -0.1521 + 0.1385 i ) e2 + ( -0.0927 + 0.0936 i ) e3             rounded to 4 decimals

•  XEQ "E^B"   gives likewise

exp(b) = ( 3.1095 - 0.0905 i ) + ( 0.7810 + 2.6836 i ) e1 + ( 0.6211 + 1.9573 i ) e2 + ( 0.4613 + 1.2310 i ) e3             rounded to 4 D

•   XEQ "LNB"

Ln (b) = ( 0.6669 + 0.7167 i ) + ( 0.6100 - 0.0013 i ) e1 + ( 0.4480 - 0.0118 i ) e2 + ( 0.2860 - 0.0222 i ) e3              rounded to 4 D

•  XEQ "SHB"

Sinh b = ( 1.6085 + 0.1583 i ) + ( 0.5553 + 1.2491 i ) e1 + ( 0.4300 + 0.9076 i ) e2 + ( 0.3047 + 0.5662 i ) e3             rounded to 4 D

•  XEQ "CHB"

Cosh b = ( 1.5010 - 0.2488 i ) + ( 0.2256 + 1.4345 i ) e1 + ( 0.1911 + 1.0497 i ) e2 + ( 0.1566 + 0.6648 i ) e3             rounded to 4 D

•  XEQ "THB"

Tanh b = ( 0.7548 - 1.1142 i ) + ( -0.8316 + 0.1404 i ) e1 + ( -0.6083 + 0.1179 i ) e2 + ( -0.3851 + 0.0953 i ) e3          rounded to 4 D

•  XEQ "ASHB"

Asinh b = ( 1.3553 + 0.7183 i ) + ( 0.6025 + 0.0482 i ) e1 + ( 0.4434 + 0.0247 i ) e2 + ( 0.2843 + 0.0013 i ) e3          rounded to 4 D

•  XEQ "ACHB"

Acosh b = ( 1.3521 + 0.7113 i ) + ( 0.6185 - 0.0512 i ) e1 + ( 0.4534 - 0.0485 i ) e2 + ( 0.2883 - 0.0459 i ) e3          rounded to 4 D

•  XEQ "ATHB"

Atanh b = ( 0.2955 - 0.2011 i ) + ( 0.9797 + 0.2256 i ) e1 + ( 0.7236 + 0.1484 i ) e2 + ( 0.4675 + 0.0711 i ) e3          rounded to 4 D

•  XEQ "SINB"

Sin b = ( 0.6434 + 1.7921 i ) + ( 1.3025 + 0.2589 i ) e1 + ( 0.9613 + 0.1671 i ) e2 + ( 0.6201 + 0.0753 i ) e3             rounded to 4 D

•  XEQ "COSB"

Cos b = ( 1.6624 - 0.0748 i ) + ( -0.1571 - 1.5114 i ) e1 + ( -0.1421 - 1.1074 i ) e2 + ( -0.1272 - 0.7033 i ) e3          rounded to 4 D

•  XEQ "TANB"

Tan b = ( -1.0993 - 0.1510 i ) + ( 0.8538 - 0.8196 i ) e1 + ( 0.6127 - 0.6171 i ) e2 + ( 0.3715 - 0.4146 i ) e3             rounded to 4 D

•  XEQ "ASINB"

Asin b = ( 0.7517 + 0.0817 i ) + ( 1.0103 + 0.5534 i ) e1 + ( 0.7519 + 0.3886 i ) e2 + ( 0.4935 + 0.2238 i ) e3          rounded to 4 D

•  XEQ "ACOSB"

Acos b = ( 0.8191 - 0.0817 i ) + ( -1.0103 - 0.5534 i ) e1 + ( -0.7519 - 0.3886 i ) e2 + ( -0.4935 - 0.2238 i ) e3          rounded to 4 D

•  XEQ "ATANB"

Atan b = ( -0.2551 + 0.2588 i ) + ( 0.2065 + 1.0188 i ) e1 + ( 0.1697 + 0.7447 i ) e2 + ( 0.1329 + 0.4705 i ) e3          rounded to 4 D

•  "B^X"  with the same b and x = 3.14          3.14  XEQ "B^X"  yields

b^x = ( 4.0377 - 5.3510 i ) + ( -2.4135 + 2.5059 i ) e1 + ( -1.7284 + 1.8833 i ) e2 + ( -1.0433 + 1.2608 i ) e3          rounded to 4D

•  Likewise   3.14  XEQ "X^B"  returns:

x^b = ( 4.0060 - 0.4653 i ) + ( 0.9349 + 3.5690 i ) e1 + ( 0.7498 + 2.6050 i ) e2 + ( 0.5648 + 1.6409 i ) e3                rounded to 4 D

•  "Z*B"  with the same b and  z = 2 + 3 i     3  ENTER^  2   XEQ "Z*B"

z.b =  ( -0.7 + 4.8 i ) + ( -0.5 + 3.8 i ) e1 + ( -0.3 + 2.8 i ) e2 + ( -0.1 + 1.8 i ) e3

•  Likewise   3  ENTER^  2   XEQ "B^Z"   returns:

b^z = ( -0.4735 + 2.3593 i ) + ( -1.8006 - 0.3988 i ) e1 + ( -1.3296 - 0.2611 i ) e2 + ( -0.8587 - 0.1233 i ) e3          rounded to 4 D

Notes:

-The standard definition of  Arc Cosh b =  Ln [ b + ( b + 1 )1/2 ( b - 1 )1/2 ]  is applied by the following routine:

 01  LBL "ACHB"  02  12  03  AMOVE  04  13  05  AMOVE  06  SIGN  07  ST+ 01  08  .5  09  XEQ "B^X"  10  12  11  ASWAP  12  SIGN  13  ST- 01  14  .5  15  XEQ "B^X"  16  XEQ "B*B1"  17  32  18  AMOVE  19  A+A  20  XEQ "LNB"  21  END

( 60 bytes / SIZE 6n+1 )

-However, since the SIZE = 6n+1,  this variant cannot compute the Arc Cosh  of a bi-64-on !
-This routine may of course be inserted in the programs above to save bytes.

Other elementary functions

-The "self-power function" is defined unambiguously by   b^b = exp ( ( Ln b ) b )

 01  LBL "B^B0"  02  12  03  AMOVE  04  XEQ "LNB"  05  XEQ "B*B1"  06  XEQ "E^B"  07  END

( 31 bytes / SIZE 4n+1 )

-The more general function  b^b'  may be defined in several ways.
-If you define it by  b^b' = exp ( ( Ln b ) b' ) ,

>>>  simply replace line 05 above by  XEQ "B*B"  and delete lines 02-03

Gudermannian Function

Formulae:    Gd(b) = 2 ArcTan [ Tanh (b/2) ]  and its inverse:   Agd(b) = 2 ArcTanh [ Tan(b/2) ]

 01  LBL "GDB"  02  2  03  ST/A  04  XEQ "THB"  05  XEQ "ATANB"  06  2   07  ST*A  08  X<>Y  09  RTN  10  LBL "AGDB"  11  2  12  ST/A  13  XEQ "TANB"  14  XEQ "ATHB"  15  2  16  ST*A  17  X<>Y  18  END

( SIZE 4n+1 )

 STACK INPUT OUTPUT X / 1.2n

Example:           b = ( 1 + 0.9 i ) + ( 0.8 + 0.7 i ) e1 + ( 0.6 + 0.5 i ) e2 + ( 0.4 + 0.3 i ) e3                       ( biquaternion  ->  8  STO 00 )

1  STO 01   0.9  STO 02   0.8  STO 03   0.7  STO 04   0.6  STO 05   0.5  STO 06   0.4  STO 07   0.3  STO 08

XEQ "GDB"   >>>>   1.008       and you find in registers R01 thru R08:

Gd( b ) = ( -1.0420 + 0.7537 i ) + ( 0.5771 + 1.7617 i ) e1 + ( 0.4551 + 1.2838 i ) e2 + ( 0.3331 + 0.8058 i ) e3         rounded to 4D

-Likewise, you'll find:

Agd( b ) = ( 0.8355 - 0.6779 i ) + ( 1.4782 + 0.6366 i ) e1 + ( 1.0970 + 0.4414 i ) e2 + ( 0.7158 + 0.2463 i ) e3         rounded to 4D

Notes:

-Of course, this list of functions is not exhaustive...

-Here are also 2 M-Code routines:  Z*B & Z*IMB
-The 1st one does the same job as the focal routine "Z*B" above
-The 2nd one multiplies by z = x+i.y the "imaginary part" of a bion i-e the coefficients of  e1 , e2 , e3 , ............
-It's equivalent to  .002  XEQ 14  in the long program above.

082  "B"
02A "*"
01A "Z"
284  CLRF 7
03B  JNC+07
082  "B"
00D "M"
009  "I"
02A "*"
01A "Z"
288  SETF 7
248  SETF 9
321   ?NCXQ                   executes the initialization
3BC  EFC8                       routine listed in paragraph 1°)b)
378  C=c
03C  RCR 3
226   C=C+1 S&X
226   C=C+1 S&X
226   C=C+1 S&X
106   A=C S&X
0B0  C=N ALL
306   ?A<C S&X
0B5   ?NCGO
0A2   DATAERROR         There will be a DATA ERROR message if  R00 = 2n < 4
28C  ?FSET 7
023   JNC+04
23A  C=C+1 M
23A  C=C+1 M
070  N=C ALL
0F8  C=X
068  Z=C
0B8  C=Y
028  T=C
0B0  C=N ALL                  LOOP
268  Q=C
10E  A=C ALL
270  RAMSLCT
0AE  A<>C ALL
266  C=C-1 S&X
270  RAMSLCT
0EE  B<>C ALL
046  C=0 S&X
270  RAMSLCT
0EE  B<>C ALL
0E8  X=C
0AE  A<>C ALL
0A8  Y=C
259   ?NCXQ            The 1st executable word of my Z*Z routine is @F696 in my ROM
3D8   Z*Z                  Change these 2 words according to your own ROM
0B8  C=Y
10E  A=C ALL
0F8  C=X
0EE  B<>C ALL
278  C=Q
070  N=C ALL
270  RAMSLCT
0AE  A<>C ALL
2F0  WRITDATA
0B0  C=N ALL
260  SETHEX
266  C=C-1 S&X
070  N=C ALL
270  RAMSLCT
0EE  B<>C ALL
2F0  WRITDATA
046  C=0 S&X
270  RAMSLCT
0B0  C=N ALL
266  C=C-1 S&X
070  N=C ALL
106  A=C S&X
03C  RCR 3
306  ?A<C S&X
2B3  JNC-42d           GOTO LOOP
046  C
270  =
038  T
0A8  Y=C
078  C=Z
0E8  X=C
3E0  RTN

( 83 words )

 STACK INPUTS OUTPUTS Y y y X x x

-See above for a numerical example.

3°)  Polynomials with Complex Coefficients

BPVAL  evaluates  p(b) = cm bm + cm-1 bm-1 + ................ + c1 b + c0    for  a given bion b  and  (m+1) complex numbers  cm , .............. , c1 , c0

-Store the bion b in registers  R01 thru R2n  as usual, and the coefficients of the polynomial in Rbb thru Ree  with  bb > 4n

Data Registers:           •  R00 = 2n > 3                    ( Registers R00 thru R2n & Rbb thru Ree are to be initialized before executing "BPVAL" )

•  R01   ......  •  R2n = b
Rn+1 ........   R4n = b   ( b is saved in R2n+1 thru R4n )

•  Rbb = Re(cm) ,  •  Rb+1 = Im(cm) , ................. , •  Ree-1 = Re(c0)   •  Ree = Im(c0)

>>>  When the program stops:     R01   ......  R2n = the n components of p(b)

Flags: /
Subroutine:    ST*A   "B*B1"   STO W   RCL W  ( where W is an extra register cf"A few M-Code Routines for the HP-41" )

-A variant that does not use register W is also listed below.

 01  LBL "BPVAL"  02  12  03  AMOVE  04  CLX  05  ST*A  06  X<>Y  07  LBL 01  08  STO W  09  XEQ "B*B1"  10  RCL W  11  RCL IND X  12  ST+ 01  13  CLX   14  SIGN  15  +  16  STO W  17  RCL IND X  18  ST+ 02  19  X<>Y  20  ISG X  21  GTO 01  22  RCL 00  23   E3  24  /  25  ISG X  26  END

( 54 bytes )

 STACK INPUT OUTPUT X bbb.eee 1.2n

where  bbb.eee  is the control number of the polynomial    ( bbb > 4n )

Example:     b = ( 1 + 2 i ) + ( 3 + 4 i ) e1 + ( 5 + 6 i ) e2 + ( 7 + 8 i ) e3                        ( biquaternion  ->  8  STO 00 )

and     p(b) = ( 2 + 3 i ) b4 + ( 4 - 7 i ) b3 + ( 3 - 5 i ) a2 + ( 1 + 4 i ) a + ( 6 + 2 i )

1  STO 01   2  STO 02   3  STO 03  ...............................  8  STO 08

-If you choose  bb = 21

2  STO 21  3  STO 22   4  STO 23   -7  STO 24   3  STO 25   -5  STO 26   1  STO 27   4  STO 28   6  STO 29   2  STO 30

-Control number =  21.030

21.030   XEQ "BPVAL"  >>>>   1.008                                    ---Execution time = 11s---

and you get in registers R01 thru R08

p(b) = ( -39087 - 128086 i ) + ( -863 + 23966 i ) e1 + ( 571 + 37456 i ) e2 + ( 2005 + 50946 i ) e3

Note:

-Here is another version without register W ( in this case, choose  bb > 4n+1 )

X+1 may be replaced by  1  +
X/E3 -------------------   E3  /

 01  LBL "BPVAL"  02  RCL 00  03  ST+ X  04  X+1  05  X<>Y  06  STO IND Y 07  12  08  AMOVE  09  CLX  10  ST*A  11  LBL 01  12  XEQ "B*B1" 13  RCL 00  14  ST+ X  15  X+1  16  RCL IND X    17  RCL IND X  18  ST+ 01 19  CLX  20  SIGN  21  +  22  STO IND Y    23  RCL IND X  24  ST+ 02 25  ISG IND Z     26  GTO 01  27  RCL 00  28  X/E3  29  ISG X  30  END

( 63 bytes )

 STACK INPUT OUTPUT X bbb.eee 1.2n

where  bbb.eee  is the control number of the polynomial    ( bbb > 4n+1 )

-Same example >>> same result.

4°)  Bionic Equations F(b) = b

-The following program again uses the same iterative method that is used for anionic equations:

-The equation must be rewritten in the form:    f ( b ) = b
and if  f  satisfies a Lipschitz condition   | f(b) - f(b') | < h | b - b' |   with  h < 1  ,   provided b and b' are close to a solution,
then the sequence  bn+1 = f ( bn )  converges to a root.

Data Registers:           •  R00 =  2n  ( 4 , 8 , .... )     ( Registers R00 thru R2n are to be initialized before executing "BEQ" )

•  R01 to R2n = the n components of the bion  b          R4n+1 to R6n: temp  ,  R6n+1 = fname

R2n+1 to R4n  may be used by the subroutine.

>>>>     When the program stops,        R01 to R2n = the n components of  a solution  b

Flags: /
Subroutine:  A program that takes the bion b   in R01 thru R2n , calculates and stores  f ( b )  in R01 thru R2n
without disturbing R4n+1 to R6n+1

-Line 43  X/E3  may be replaced with   E3  /

 01  LBL "BEQ"  02  RCL 00  03  3  04  *  05  1  06  +  07  ASTO IND X  08  LBL 01  09  VIEW 01 10  13  11  AMOVE  12  SIGN  13  RCL 00  14  3  15  *  16  +  17  RCL IND X    18  XEQ IND X 19  3  20  RCL 00  21  ST* Y  22  0  23  LBL 02  24  RCL IND Y    25  ST- IND T  26  CLX  27  RCL IND T 28  ABS  29  +  30  DSE Z  31  DSE Y  32  GTO 02          33  X#0?  34  GTO 01  35  RCL 00  36  3 37  *  38  1  39  +  40  CLA  41  ARCL IND X  42  RCL 00  43  X/E3  44  ISG X  45  END

( 70 bytes / SIZE 6n+2 )

 STACK INPUTS OUTPUTS Alpha f name f name X / 1.2n

where  1.2n  = control number of the solution

Example:     Find a solution of the biquaternionic equation

b2  - Ln b  + ( 0.1 + 0.2 i ) + ( 0.3 + 0.4 i ) e1 + ( 0.5 + 0.6 i ) e2 + ( 0.7 + 0.8 i ) e3 = 0      near   b = 1

-First, we re-write this equation:    b  =  [ Ln b  - {  ( 0.1 + 0.2 i ) + ( 0.3 + 0.4 i ) e1 + ( 0.5 + 0.6 i ) e2 + ( 0.7 + 0.8 i ) e3 } ] 1/2  =  f ( b )

-The short routine "T" hereunder computes  f ( b )

 01  LBL "T"  02  XEQ "LNB"  03  .1  04  ST- 01  05  .2  06  ST- 02  07  .3  08  ST- 03  09  .4  10  ST- 04  11  .6  12  ST- 06  13  .7  14  ST- 07  15  .8  16  ST- 08  17  .5  18  ST- 05  19  XEQ "B^X"  20  RTN  21  END

-Then,  2n = 8    STO 00

-Initial approximation:     1  STO 01  CLX  STO 02  STO 03  STO 04  STO 05  STO 06  STO 07  STO 08

-Place the subroutine name in the alpha register:  alpha  "T"  alpha

XEQ "BEQ"   >>>>    the successive approximations of the real part of the 1st component of the solution are displayed, and after several minutes, we get:

X =  1.008 = control number of the solution.

-We find in registers R01 thru R08

b = ( 1.014983106 + 0.292115635 i )  +  ( -0.307551610 - 0.118387777 i )  e1
+ ( -0.489251534 - 0.160080803 i )  e2 + ( -0.670951458 - 0.201773829 i )  e3

Notes:

-To avoid an infinite loop, replace line 33 by  E-8   X<Y?

-The convergence is very slow.
-If  f doesn't satisfy the required Lipschitz condition or if we choose a bad initial guess, the algorithm may be divergent.
-As usual, rewriting the equation in a proper form is often very difficult.

-If you need more registers for your function, replace 3 by a larger number like 4 ( lines 03-14-19-36 ) and replace line 10 by 14 or more.