INV DSZ in its natural habitat - Printable Version +- HP Forums (https://www.hpmuseum.org/forum) +-- Forum: Not HP Calculators (/forum-7.html) +--- Forum: Not remotely HP Calculators (/forum-9.html) +--- Thread: INV DSZ in its natural habitat (/thread-17585.html) INV DSZ in its natural habitat - Dave Britten - 10-15-2021 01:56 PM Yesterday there was some question as to whether or not the INV DSZ (decrement and skip if not zero) instruction present on some TIs was at all useful. I maintain that it's useful in any situation where you decrement a counter and break out of the middle of a loop, rather than at the end of the loop body. I put together a little example by way of a cumulative binomial distribution program. First, a BASIC version for the 71B that makes the algorithm a little easier to read: Code: ```0001 DESTROY ALL  0010 INPUT "N?";N 0020 INPUT "P?";P 0030 INPUT "X?";X 0040 T=0 @ R=0 0050 F=P/(1-P) 0060 K=X+1 0070 B=(1-P)^N 0080 T=T+B 0090 K=K-1 @ IF K=0 THEN GOTO 120 @ REM INV DSZ! 0100 B=B*(N-R)/(R+1)*F @ R=R+1 0110 GOTO 80 0120 PRINT T``` To use it, run the program, enter the number of trials N, the probability of success in a single trial P, and the number of successful trials X. The program will show the cumulative lower tail binomial probability, i.e. probability of the number of successes being between 0 and X. Note line 90, where the program decrements a counter, and breaks out of the middle of the loop (lines 80 to 110) when the counter reaches zero. Now, here are printouts of both an HP 97 version, and a TI-59 version. On the HP version, you have to do something like using an extra LBL and GTO to invert the DSZ test behavior. On the TI-59, you can simply use INV DSZ directly. To run either of these, store N in R01, P in R02, X in R03, and press A. https://i.imgur.com/rxENjWN.jpg Ignoring the fact that the TI program is about twice the size of the HP one it's clear that this is a case where INV DSZ can be used to save a couple of steps, and make the program flow easier to read. RE: INV DSZ in its natural habitat - BruceH - 10-15-2021 04:18 PM I assume these two statements are used to implement the following types of loop (expressed in C syntax), in which case both have their place. Code: ```/* DSZ */ do { ... } while (--x != 0)``` whereas Code: ```/* INV DSZ (or DSNZ) */ while (--x != 0) { ... }``` RE: INV DSZ in its natural habitat - Dave Britten - 10-15-2021 04:24 PM Kind of. It's more akin to this, at least in my example: Code: ``` c = 10; while (true) {   //do stuff   if (--c == 0) break;   //do more stuff }``` RE: INV DSZ in its natural habitat - Ross Barnes - 10-16-2021 12:12 AM Dave, Someone at TI found INV DSZ useful since it was used in steps 28-29 of their Battleship program in the SR-56 Application Library book, p. 188. Ross RE: INV DSZ in its natural habitat - xerxes - 10-18-2021 06:38 PM INV DSZ/ISZ can be usefull in some cases. Here a size optimized code for the TI-62 to calculate the factoral: Code: ```00 * 01 INV DSZ 02 R/S 03 RCL 0``` Usage example: 69 STO 0 RST R/S RE: INV DSZ in its natural habitat - Dave Britten - 10-19-2021 06:54 PM (10-18-2021 06:38 PM)xerxes Wrote:  INV DSZ/ISZ can be usefull in some cases. Here a size optimized code for the TI-62 to calculate the factoral: Code: ```00 * 01 INV DSZ 02 R/S 03 RCL 0``` Usage example: 69 STO 0 RST R/S Nice, didn't realize the lower-end machines had it too. I wonder if it works on the TI-65. RE: INV DSZ in its natural habitat - xerxes - 10-19-2021 09:03 PM (10-19-2021 06:54 PM)Dave Britten Wrote:  Nice, didn't realize the lower-end machines had it too. I wonder if it works on the TI-65. INV DSZ is also present on the TI-65, but I'm not sure, if the code works on the TI-65 too, because it based on the circular program execution ability of the TI-62.