DM41 and DM42: Self Timing Programs
Timing a Program's Performance
The Swiss Micros calculators DM41 (including the DM41L, DM41X, Hewlett Packard HP 41CX, HP41C with a Time Module installed) and DM42 have an internal clock which allows us to set the date and time on the calculator. With the use of the TIME function we can determine the how long a program takes to execute.
One structure that can be used:
[ preliminary storage]
TIME
HR (DM 41), →HR (DM 42)
STO Rxx (register xx)
[ loop/main program starts here ]
TIME
HR (DM 41), →HR (DM 42)
RCL Rxx
-
ABS
3600
*
The routine TIME, HR, RCL xx, -, ABS, 3600, * determines the amount of time in term of seconds.
DM42S: Accessing the TIME function: [SHIFT], [ + ] (CATALOG), [down arrow], ( TIME ) ("F1")
Let's demonstrate this technique on three examples. The time record is the calculator ran on batteries.
Example 1: 40th Fibonacci Numbers
Registers:
R01: counter
R02: sum
R03: time
(counter of 39 is set because the first Fibonacci number is loaded at the beginning)
DM41 Program TFIB
01 LBL ^T TFIB
02 39
03 STO 01
04 0
05 STO 02
06 TIME
07 HR
08 STO 03
09 1
10 0
11 +
12 LBL 00
13 LASTX
14 X<>Y
15 +
16 DSE 01
17 GTO 00
18 TIME
19 HR
20 RCL 03
21 -
22 ABS
23 3600
24 *
25 STO 03
26 END
Y: Results: 102334155.0
X: Seconds: 0.5100
DM42 Program TFIB
00 {45-Byte Prgm}
01 LBL "TFIB"
02 39
03 STO 01
04 0
05 STO 02
06 TIME
07 →HR
08 STO 03
09 1
10 0
11 +
12 LBL 00
13 LASTX
14 X<>Y
15 +
16 DSE 01
17 GTO 00
18 TIME
19 →HR
20 RCL 03
21 -
22 ABS
23 3600
24 ×
25 STO 03
26 END
Y: Results: 102334155.0
X: Seconds: 0.0200
Example 2: The Sum of Cubes Using a Loop from 1 to 250
Registers:
R01: counter
R02: sum
R03: time
DM41 Program TSUM
01 LBL ^T TSUM
02 250
03 STO 01
04 0
05 STO 02
06 TIME
07 HR
08 STO 03
09 LBL 00
10 RCL 01
11 3
12 Y↑X
13 ST+ 02
14 DSE 01
15 GTO 00
16 RCL 02
17 TIME
18 HR
19 RCL 03
20 -
21 ABS
22 3600
23 *
24 STO 03
25 END
Y: Results: 984390625.0
X: Seconds: 12.07
DM42 Program TSUM
00 {45-Byte Prgm}
01 LBL "TSUM"
02 250
03 STO 01
04 0
05 STO 02
06 TIME
07 →HR
08 STO 03
09 LBL 00
10 RCL 01
11 3
12 Y↑X
13 STO+ 02
14 DSE 01
15 GTO 00
16 RCL 02
17 TIME
18 →HR
19 RCL 03
20 -
21 ABS
22 3600
23 ×
24 STO 03
25 END
Y: Results: 984390625.0
X: Seconds: 0.24
Example 3: Savage Test
Let A = 1, then for 2499 loops:
A = tan(atan(exp(ln(sqrt(A^2))))) + 1 (radians mode is used)
Registers:
R01: counter
R02: sum
R03: time
DM41 Program SVGE
01 LBL ^T SVGE
02 2499
03 STO 01
04 1
05 STO 02
06 TIME
07 HR
08 STO 03
09 LBL 00
10 RCL 02
11 X↑2
12 SQRT
13 LN
14 E↑X
15 ATAN
16 TAN
17 1
18 +
19 STO 02
20 DSE 01
21 GTO 00
22 RCL 02
23 TIME
24 HR
25 RCL 03
26 -
27 ABS
28 3600
29 *
30 STO 03
31 END
Y: Results: 2499.970322
X: Seconds: 246.4500240 (about 4 minutes, 6.45 seconds)
DM42 Program SVGE
00 {51-Byte Prgm}
01 LBL "SVGE"
02 2499
03 STO 01
04 1
05 STO 02
06 TIME
07 →HR
08 STO 03
09 LBL 00
10 RCL 02
11 X↑2
12 SQRT
13 LN
14 E↑X
15 ATAN
16 TAN
17 1
18 +
19 STO 02
20 DSE 01
21 GTO 00
22 RCL 02
23 TIME
24 →HR
25 RCL 03
26 -
27 ABS
28 3600
29 ×
30 STO 03
31 END
Y: Results: 2500 (just over 2500)
X: Seconds: 13.24
Source:
Burkett, John. "The Savage Benchmark" TI-89 / TI-92 Plus Tip List 10.0 July 20, 2002. http://www.technicalc.org/tiplist/en/files/pdf/tips/tip6_50.pdf Retrieved November 28, 2020
Eddie