Replaces the contents of the result variable with the sum of the absolute differences between the two input vectors.
If the input vectors are of different lengths, the shorter vector will be "extended" to the length of the longer by repeating its last element as many times as necessary. This extension is only done internally and does not change the actual size or content of the shorter vector.
If any element is a "missing" value (represented by a "." or "NaN") the result for SUMABSDEV will be NaN. To avoid this, you can CLEAN the input vector(s) before applying the SUMABSDEV command.
COPY 1,5 A SUMABSDEV A 2 B PRINT A B
The above program produces the following output:
A: (1.0 2.0 3.0 4.0 5.0) B: 7.0
Sometimes, you'll want to compare two vectors for equality or to determine if all elements of one vector are the same. The SUMABSDEV command is useful for these purposes. The following program shows an example of each technique. The code in red shows how to determine if two vectors are equal. The code in blue shows how to determine if all the elements of a single vector are the same (two examples of this in the code).
'Compute probability of a straight excluding straight flushes: 'A Straight consists of 5 cards with consecutive values with the 'addition that Ace can be high (13) or low (1) as needed 'to complete the sequence. A flush is 5 cards of the same suit. 'Solution uses the fact that if an ascending sequence of consecutive 'numbers is shifted one place and subtracted from the original, then 'the middle numbers will all be one. For example: ' 4 5 6 7 8 - original sequence ' (0) 4 5 6 7 8 shifted sequence ' 4 1 1 1 1 0 difference 'Solution also uses a trick with SUMABSDEV to check for occurrences 'of a flush. (Removing the flushes affects only the third significant 'figure and beyond, so the difference may not be detectable unless 'a huge number of samples is used.) COPY 1000000 repeatCount COPY 1,13 1,13 1,13 1,13 deck COPY 1,4 suit REPEAT repeatCount SHUFFLE deck shuffledDeck TAKE shuffledDeck 1,5 hand SORT hand sortedHand COPY 0 sortedHand shiftedSortedHand SUBTRACT sortedHand shiftedSortedHand diffVector TAKE diffVector 2,5 diffVectorCenter COUNT diffVectorCenter between 1 1 diffVectorSum IF diffVectorSum = 4 'We have a straight. Check if suits match. SAMPLE 5 suit suits TAKE suits 1 firstSuit SUMABSDEV suits firstSuit result IF result <> 0 SCORE 1 straightCountScore END END ' Handle special case where ace = 13: SUMABSDEV sortedHand (1 9 10 11 12) aceWild IF aceWild = 0 'We have an Ace high straight. Check if suits match. SAMPLE 5 suit suits TAKE suits 1 firstSuit SUMABSDEV suits firstSuit result IF result <> 0 SCORE 1 straightCountScore END END END SUM straightCountScore straightCount DIVIDE straightCount repeatCount probability PRINT probability