ABS
Syntax |
ABS (number) or ABS (number1 *[,numberx]*) (Minerva only) |
Location |
QL ROM |
This function returns the absolute value of a number - ie. the positive difference (or distance) between zero and the number. The absolute value of a positive number (including zero) therefore, is the number itself - negative numbers are converted to positive. This function will happily handle 32-bit integer numbers (-INTMAX..INTMAX, roughly -1E9..1E9).
Example 1
The SIGN% function returns 1 if the supplied parameter is positive, -1 if negative, or 0 if it is zero, for example,
PRINT SIGN%(-10) will print -1 on screen.
This version rounds values which are very close to zero (use = in line 110 instead of == if you want to avoid this).
Note that line 110 is needed to avoid an error when line 120 tries to divide by zero.
100 DEFine FuNction SIGN% (number)
110 IF number==0 THEN RETurn 0
120 RETurn number/ABS(number)
130 END DEFine
Example 2
Here is a simple implementation of the cosine function. Of course, it cannot compete with the speed of a machine code function, but it allows you to specify the precision of the result. You can optimise the function by exploiting the symmetries of the cosine function.
100 DEFine FuNction MYCOS (x, prec)
110 LOCal fct, result, xpower, i, lagrange, sqrx
120 fct = 1: result = 1
130 xpower = 1: sqrx = x*x
140 i = 2
150 REPeat taylor
160 fct = fct * (i-1) * i
170 xpower = - xpower * sqrx
180 result = result + xpower/fct
190 lagrange = ABS(xpower*x / fct / (i+1))
200 IF lagrange < prec THEN EXIT taylor
210 i = i + 2
220 END REPeat taylor
230 RETurn result
240 END DEFine MYCOS
MINERVA NOTE
ABS can accept more than one parameter. This version of ABS will square each parameter, and return the square root of the total of those squares, eg. ABS(x,y)=SQRT(x2+y2). This is therefore useful to calculate the distance between two points (using pythagoras’ method).
For example, to calculate the distance between the points on screen at (10,20) and (100,75), simply type in: PRINT ABS(100-10,75-20)
Three parameters can be used to find the distance between two points in three dimensional space. Any more parameters take you into the realm of theoretical mathematics (we always thought that time was the fourth dimension!).
For example, to calculate the length of a diagonal in a standard cube (length of sides = 1), use: PRINT ABS(1,1,1)
CROSS-REFERENCE
See SGN and SGN% for similar machine code versions of our example function SIGN% demonstrated above.