I used the undocumented [MAX] and [MIN] function that was discovered by Joseph K. Horn. In the program below you can see a part about correction of the precision error of the HP 42S. The error appears when doing division and multiplication with sub matrices. The error can be verified on your calculator by calculating
.
The program takes an existing matrix in the X register and row reduces it to the reduced echelon form. The matrix remains in the X register. The execution may take some time, depending on the size of the matrix.
Below the program sources, comments are on the right side:
01 LBL "RREF" 02 MAT? 03 STO "MATA" 04 INDEX "MATA" 05 I- 06 RCLIJ 07 STO 06 // # of columns 08 X<>Y 09 STO 07 // # of rows 10 I+ 11 1 12 LBL 00 // search pivot 13 STO 01 //pivot row 14 LBL 01 15 [MAX] 16 X≠O? 17 GTO 02 18 J+ 19 FC? 76 20 GTO 01 21 GTO 05 22 LBL 02 // found pivot 23 ABS 24 [MIN] 25 ABS 26 X<>Y 27 R↓ 28 X≤Y? 29 R↑ 30 R↑ 31 RCL 01 32 R<>R 33 RCLEL // precision error check 34 ABS 35 1E-11 36 X≠O? 37 GTO 22 38 0 39 STOEL 40 GTO 01 41 LBL 22 // end of precision error 42 RCLIJ 43 RCL 06 44 X<>Y 45 - 46 1 47 + 48 STO 02 49 1 50 X<>Y 51 GETM 52 RCLEL 53 ÷ 54 STO "MATB" 55 PUTM 56 LBL 03 // row reduce 57 I+ 58 FS? 76 59 GTO 04 60 RCLEL 61 X=0? 62 GTO 03 63 1 64 RCL 02 65 GETM 66 X<>Y 67 ÷ 68 RCL "MATB" 69 - 70 PUTM 71 GTO 03 72 LBL 04 // seek to new pivot line 73 FS? 77 74 GTO 05 75 RCLIJ 76 RCL 01 77 X<>Y 78 STOIJ 79 I+ 80 FS? 76 81 GTO 05 82 GTO 00 83 LBL 05 // backward pivoting 84 RCL 01 85 1 86 STOIJ 87 LBL 55 88 RCLEL 89 X≠0? 90 GTO 56 91 J+ 92 FC? 76 93 GTO 55 94 J- 95 I- 96 FS? 76 97 GTO 99 98 RCLIJ 99 X<>Y 100 1 101 STOIJ 102 GTO 55 103 LBL 56 104 RCLIJ 105 X<>Y 106 STO 01 107 X<>Y 108 RCL 06 109 X<>Y 110 - 111 1 112 + 113 STO 02 114 1 115 X<>Y 116 GETM 117 STO "MATB" 118 LBL 06 119 I- 120 FS? 76 121 GTO 07 122 RCLEL 123 X=0? 124 GTO 06 125 1 126 RCL 02 127 GETM 128 X<>Y 129 RCL "MATB" 130 x 131 - 132 PUTM 133 GTO 06 134 LBL 07 135 RCLIJ 136 RCL 01 137 X<>Y 138 STOIJ 139 I- 140 FS? 76 141 GTO 99 142 RCLIJ 143 X<>Y 144 STO 01 145 GTO 05 146 LBL 99 147 RCL "MATA" 148 .END.