 TDS9092 TECHNICAL MANUAL Programming Mathematical operations Live website search Enter key words MATHEMATICAL OPERATIONS

These are abbreviated details from the section WORD LIST grouped here for convenience, see that section for notation definition. Only integer mathematics in the Forth ROM is shown, see below for a summary of integer extensions, floating point and other methods.

 * ( n1 n2 - n1*n2 ) */ ( n1 n2 n3 - n4 ) Scale n1 by ratio n2/n3 */MOD ( n1 n2 n3 - n4 n5 ) Leave quotient n5 and remainder n4 of operation n1*n2/n3 + ( n1 n2 - n1+n2 ) +! ( n addr - ) Add n to value at address +- ( n1 n2 - n3 ) Apply sign of n2 to n1, which is left as n3 - ( n1 n2 - n1-n2 ) / ( n1 n2 - n1/n2 ) /MOD ( n1 n2 - rem quot ) Leave remainder and signed quotient n1/n2 0< ( n - f ) True if number less than zero 0=0= ( n - f ) f=1 if n not zero, f=0 if n is zero 0= ( n - f ) True if number equal to zero 0> ( n - f ) True if number greater than zero 1+ ( n - n+1 ) 1- ( n - n-1 ) 2* ( n - n*2 ) 2+ ( n - n+2 ) 2- ( n - n-2 ) 2/ ( n - n/2 ) < ( n1 n2 - f ) True if n1 less than n2 <> ( n1 n2 - f ) True if n1 not equal to n2 = ( n1 n2 - f ) True if n1 equal to n2 > ( n1 n2 - f ) True if n1 greater than n2 ABS ( n - u ) Leave absolute value u of number n C+! ( b a - ) Add lower byte of second item on the stack to byte at addr D*/ ( d1 n1 n2 - d2 ) Scale double number d1 by ratio n1/n2 D*S ( d1 n - d2 ) d2 = d1 * n D+ ( d1 d2 - d1+d2 ) D+- ( d1 n - d2 ) Apply sign of n to d1, which is left as d2 D- ( d1 d2 - d1-d2 ) D/ ( d1 d2 - n ) n = d1 / d2 D/S ( d1 n - d2 ) d2 = d1 / n D0= ( d - f ) True if double number equal to zero D< ( d1 d2 - f ) True if d1 less than d2 D= ( d1 d2 - f ) True if d1 equal to d2 DABS ( d - ud ) Leave absolute value ud of double number d DMINUS ( d1 - d2 ) d2 = -d1 M* ( n1 n2 - d ) d = n1 * n2 M+ ( d1 n - d2 ) d2 = d1 + n M/ ( d n - n2 n3 ) Leave remainder n2 and quot. n3 of d/n M/MOD ( ud1 u2 - u3 ud4 ) Leave remainder u3 and quotient ud4 of ud1/u2 MAX ( n1 n2 - n3 ) n3 is the greater of n1 and n2 MIN ( n1 n2 - n3 ) n3 is the lesser of n1 and n2 MINUS ( n1 - n2 ) n2 = -n1 MOD ( n1 n2 - n3 ) n3 is the remainder of n1/n2 S->D ( n - d ) Sign extend single number n to form double number d T* ( ud u - ut ) ud * u giving 48-bit product T/ ( ut u - ud ) ut / u 48-bit integer divided by single to give double integer U* ( u1 u2 - ud ) ud = u1 * u2 U*/ ( ud1 u1 u2 - ud2 ) Scale unsigned double number ud1 by ratio u1/u2 U/ ( ud u1 - u2 u3 ) Leave remainder u2 and quotient u3 of ud/u1 U< ( u1 u2 - f ) True if u1 less than u2

INTEGER TYPES  (Forth ROM and _MATH.TDS)

Use integer (16-bit) or double-integer (32-bit) where possible because you get the best speed. Scaling the input and output to fit in the range ±2,000,000,000 generally allows this.

Integer functions in the Forth ROM are shown above but in the file _MATH.TDS there is a wide range of others available including 48-bit arithmetic, logarithms and exponentials.

FIXED POINT   (_FIXED.TDS)

Uses 32-bit integer arithmetic for speed and accuracy but has fixed decimal point for input and output. You can choose between 0 and 4 decimal places.

FRACTIONAL ARITHMETIC   (Forth ROM and _SQRT.TDS)

This u ses 16-bit integer arithmetic for speed. You scale input and output to the range ±2.000 before using the mathematical operations. Apart from the main four functions and conversion words, sine, cosine, logarithms, exponentials and square roots are provided.

FLOATING POINT   (TDS-FLOAT - optional extra)

DESCRIPTION

The package TDS-FLOAT is a fully-featured floating point and extended string handling package for the TDS9092. It is available as an option. Use the parts of it you need in your application code.

However be sure you really need floating point. Floating point arithmetic enables very small numbers (like 0.0000000001) to very large numbers (like 3000000000000) to be handled at the same time. This is very rarely needed and the extensive 32-bit double number arithmetic routines in the TDS9092 cater for most needs. These can handle from 0 to ±2000000000, or 0.00000 to ±20000.00000 for example.

Occasions do arise where floating point would be useful. TDS-FLOAT is available in source code on a PC format disk. Apart from normal calculator functions, a full range of trigonometrical and log/exponential functions is included with accuracy 8 to 10 decimal digits. There are also string extensions to give Forth equivalents of the string handling words in BASIC. A manual with a printed source listing is provided.

TYPICAL PERFORMANCE

 Floating point multiply F* 8ms Floating point divide F/ 53ms Floating point add F+ 10ms Floating point sine FSIN 270ms

FLOATING POINT PRINCIPAL WORDS

 1/PI 10^X D! D* D>F D@ DEG>RAD DIM DINT E E# E. E^X F! F# F* F+ F- F. F/ F/MOD F10* F< F<0 F=0 F>0 F@ FABS FACOS FALN FALOG FASIN FATAN FCONSTANT FCOS FDROP FDUP FINT FLITERAL FLN FLOAT FLOG FMAX FMIN FMINUS FMOD FOVER FROT FSIGN FSIN FSQR FSWAP FTAN FVARIABLE FX^N FX^Y PI RAD>DEG S>D S>F SINT

STRING FUNCTION PRINCIPAL WORDS

 \$! \$+ \$. \$@ \$DIM \$DROP \$DUP \$INPUT \$SWAP \$VARFILL \$VARIABLE ASC E.\$ E.N F.\$ F.N FASC FLEN INPUT LEFT\$ LEN MID\$ RIGHT\$ STR\$ VAL 