EFORM A useful routine for the mathematical dabbler provided by David Roberts of London. The following BASIC subroutine allows the user to PRINT any numeric variable or constant in E format as opposed to leaving it to the discretion of the ROM. Also, a variable number of significant figures is available and rounded up where necessary. The principal advantage of this utility is knowing, a priori, how much space a number will take in the display. The subroutine can be used without any acquaintance with the principles involved. The value to be PRINTed is placed in a reserved variable which has been called 'a'. For example, if we want to print x, y, z(3) and so on we simply LET a=x, y, z(3) and so on. The number of significant figures required is defined by n, either permanently at the beginning of a program or as a temporary value just prior to calling the subroutine. The PRINT position is expected to have been set by the calling routine; the first position being a space for positive numbers and, would you believe, a minus sign for negative numbers. A GO SUB EFORM (EFORM, of course, being defined at an earlier stage) completes the operation. The value of n may be an integer in the range 2 to 8 with a default value of 6 in the event of a typing error - I don't like the term idiot proofing because of the dispro- portionate use I make of the safeguards provided in other people's programs! Rigorous tests have not been carried out on the speed of the subroutine since it will vary from program to program but the following test program PRINTed numbers about 10 times slower than the ROM. This may sound an eternity but scientific users should find it tolerable. EFORM can easily be converted to work on a ZX81 but it was found intolerable in SLOW mode. Users crunching numbers on a ZX81 will pro- bably have the machine working in FAST mode anyway. The PRINTing of the exponent differs to the Sinclair represen- tation. The following examples illustrate the differences. Sinclair EFORM E+9 E+09 E-9 E-09 and with E 00 PRINTed for a zero exponent. This is purely cosmetic and can easily be altered if required. Those who may be interested in how EFORM works would be best advised to work through some examples by hand. How- ever, line 1040 requires a little explanation. After calcu- lating the exponent b and mantissa c, provided that c is not an integer, from a PRINTing point of view the conver- sion of c into a string is not necessary remembering that the machine accuracy is greater than 9 significant figures decimal, but less than 10 and the PRINT accuracy is 8 rounded. The calculation of b may fail because of machine accuracy but this creates a complimentary situation in calculating c and so requires no additional work. Gene- rally, we would need the services of INT and VAL but since, in theory, 1<=c<10 we can simplify the checking by using LEN. In practice c may take the values 1 and 10, and integers in between, hence line 1040. Inevitably, the number to be PRINTed is corrupted simply by examining it but this corruption is in the 9th signifi- cant figure. Rounding to 8 significant figures will then be suspect, if not already by virtue of whatever number crun- ching is involved prior to calling EFORM. Readers who would prefer a faster routine may like to adapt a little routine in the ROM starting at address 2DE3 which Ian Logan calls PRINT_FP. I've allocated the next bank holiday weekend for this task (tongue firmly in cheek).