(FILECREATED "25-Jun-86 12:29:12" {QV}<PEDERSEN>LISP>EARRAY-ARITHFNS.;15 39795  

      changes to:  (VARS EARRAY-ARITHFNSCOMS)
		   (FNS EARRAY-SAMPLE-VARIANCE-REDUCE EARRAY-SAMPLE-VARIANCE EARRAY-VARIANCE 
			EARRAY-VARIANCE-REDUCE EARRAY-FLOAT-ABS EARRAY-FLOAT-DIFFERENCE 
			EARRAY-FLOAT-FIX EARRAY-FLOAT-FLOAT EARRAY-FLOAT-MAX EARRAY-FLOAT-MIN 
			EARRAY-FLOAT-MINUS EARRAY-FLOAT-PLUS EARRAY-FLOAT-QUOTIENT 
			EARRAY-FLOAT-RECIPROCAL EARRAY-FLOAT-REMAINDER EARRAY-FLOAT-TIMES 
			EARRAY-GENERIC-DIFFERENCE EARRAY-GENERIC-PLUS EARRAY-GENERIC-QUOTIENT 
			EARRAY-GENERIC-TIMES)

      previous date: "23-Jun-86 14:05:47" {QV}<PEDERSEN>LISP>EARRAY-ARITHFNS.;12)


(* Copyright (c) 1986 by Xerox Corporation. All rights reserved.)

(PRETTYCOMPRINT EARRAY-ARITHFNSCOMS)

(RPAQQ EARRAY-ARITHFNSCOMS ((FNS EARRAY-ABS EARRAY-ABS-FN EARRAY-CEILING EARRAY-CEILING-FN 
				   EARRAY-DIFFERENCE EARRAY-DIFFERENCE-FN EARRAY-DIFFERENCE-SWEEP 
				   EARRAY-FIX EARRAY-FIX-FN EARRAY-FLOAT EARRAY-FLOAT-ABS 
				   EARRAY-FLOAT-DIFFERENCE EARRAY-FLOAT-FIX EARRAY-FLOAT-FLOAT 
				   EARRAY-FLOAT-FN EARRAY-FLOAT-MAX EARRAY-FLOAT-MAX-REDUCE 
				   EARRAY-FLOAT-MIN EARRAY-FLOAT-MIN-REDUCE EARRAY-FLOAT-MINUS 
				   EARRAY-FLOAT-PLUS EARRAY-FLOAT-PLUS-REDUCE EARRAY-FLOAT-PLUS-SCAN 
				   EARRAY-FLOAT-QUOTIENT EARRAY-FLOAT-RECIPROCAL 
				   EARRAY-FLOAT-REMAINDER EARRAY-FLOAT-TIMES EARRAY-FLOAT-TIMES-SCAN 
				   EARRAY-FLOOR EARRAY-FLOOR-FN EARRAY-GENERIC-DIFFERENCE 
				   EARRAY-GENERIC-PLUS EARRAY-GENERIC-PLUS-REDUCE 
				   EARRAY-GENERIC-QUOTIENT EARRAY-GENERIC-TIMES EARRAY-MAX 
				   EARRAY-MAX-FN EARRAY-MAX-REDUCE EARRAY-MAX-REDUCE-FN EARRAY-MEAN 
				   EARRAY-MEAN-REDUCE EARRAY-MIN EARRAY-MIN-FN EARRAY-MIN-REDUCE 
				   EARRAY-MIN-REDUCE-FN EARRAY-MINUS EARRAY-MINUS-FN EARRAY-PLUS 
				   EARRAY-PLUS-FN EARRAY-PLUS-REDUCE EARRAY-PLUS-REDUCE-FN 
				   EARRAY-PLUS-SCAN EARRAY-PLUS-SCAN-FN EARRAY-PLUS-SWEEP 
				   EARRAY-QUOTIENT EARRAY-QUOTIENT-FN EARRAY-QUOTIENT-SWEEP 
				   EARRAY-RECIPROCAL EARRAY-RECIPROCAL-FN EARRAY-REMAINDER 
				   EARRAY-REMAINDER-FN EARRAY-ROUND EARRAY-ROUND-FN 
				   EARRAY-SAMPLE-VARIANCE EARRAY-SAMPLE-VARIANCE-REDUCE EARRAY-TIMES 
				   EARRAY-TIMES-FN EARRAY-TIMES-SCAN EARRAY-TIMES-SCAN-FN 
				   EARRAY-TIMES-SWEEP EARRAY-VARIANCE EARRAY-VARIANCE-REDUCE)
	(DECLARE: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (LOCALVARS . T))))
(DEFINEQ

(EARRAY-ABS
  [LAMBDA (ARRAY RESULT)                                   (* jop: "13-Jun-86 12:10")

          (* *)


    (EARRAY-MONADIC-APPLY (FUNCTION ABS)
			    ARRAY RESULT (EARRAY-ELEMENT-TYPE ARRAY])

(EARRAY-ABS-FN
  [LAMBDA (OP ARRAY RESULT)                                  (* jop: "13-Jun-86 11:53")

          (* *)


    (if (AND (EQ (EARRAY-ELEMENT-TYPE ARRAY)
		       (QUOTE SINGLE-FLOAT))
		 (EQ (EARRAY-ELEMENT-TYPE RESULT)
		       (QUOTE SINGLE-FLOAT)))
	then (EARRAY-FLOAT-ABS ARRAY RESULT)
      else (EARRAY-GENERIC-MONADIC-APPLY (FUNCTION ABS)
					     ARRAY RESULT])

(EARRAY-CEILING
  [LAMBDA (ARRAY RESULT)                                   (* jop: "15-Jun-86 15:39")

          (* *)


    (EARRAY-MONADIC-APPLY (FUNCTION CEILING)
			    ARRAY RESULT])

(EARRAY-CEILING-FN
  [LAMBDA (OP ARRAY RESULT)                                  (* jop: "23-Jun-86 12:04")

          (* *)


    (EARRAY-GENERIC-MONADIC-APPLY (FUNCTION SCALAR-CEILING)
				    ARRAY RESULT])

(EARRAY-DIFFERENCE
  [LAMBDA (ARRAY1 ARRAY2 RESULT)                             (* jop: "13-Jun-86 12:28")

          (* *)


    (EARRAY-DYADIC-APPLY (FUNCTION DIFFERENCE)
			   ARRAY1 ARRAY2 RESULT (EARRAY-ARITH-TYPE (EARRAY-ELEMENT-TYPE ARRAY1)
								     (EARRAY-ELEMENT-TYPE ARRAY2])

(EARRAY-DIFFERENCE-FN
  [LAMBDA (OP ARRAY1 ARRAY2 RESULT)                          (* jop: "13-Jun-86 12:20")

          (* *)


    (if (AND (USE-FLOAT-P ARRAY1 ARRAY2)
		 (EQ (EARRAY-ELEMENT-TYPE RESULT)
		       (QUOTE SINGLE-FLOAT)))
	then (EARRAY-FLOAT-DIFFERENCE ARRAY1 ARRAY2 RESULT)
      else (EARRAY-GENERIC-DIFFERENCE ARRAY1 ARRAY2 RESULT])

(EARRAY-DIFFERENCE-SWEEP
  [LAMBDA (ARRAY1 ARRAY2 AXIS RESULT)                        (* jop: "17-Jun-86 21:17")

          (* *)


    (EARRAY-SWEEP (FUNCTION DIFFERENCE)
		    ARRAY1 ARRAY2 AXIS RESULT (EARRAY-ARITH-TYPE (EARRAY-ELEMENT-TYPE ARRAY1)
								   (EARRAY-ELEMENT-TYPE ARRAY2])

(EARRAY-FIX
  [LAMBDA (ARRAY RESULT)                                   (* jop: "13-Jun-86 12:10")

          (* *)


    (EARRAY-MONADIC-APPLY (FUNCTION FIX)
			    ARRAY RESULT])

(EARRAY-FIX-FN
  [LAMBDA (OP ARRAY RESULT)                                  (* jop: "13-Jun-86 11:53")

          (* *)


    (if (EQ (EARRAY-ELEMENT-TYPE ARRAY)
		(QUOTE SINGLE-FLOAT))
	then (EARRAY-FLOAT-FIX ARRAY RESULT)
      else (EARRAY-GENERIC-MONADIC-APPLY (FUNCTION FIX)
					     ARRAY RESULT])

(EARRAY-FLOAT
  [LAMBDA (ARRAY RESULT)                                   (* jop: "13-Jun-86 12:10")

          (* *)


    (EARRAY-MONADIC-APPLY (FUNCTION FLOAT)
			    ARRAY RESULT (QUOTE SINGLE-FLOAT])

(EARRAY-FLOAT-ABS
  [LAMBDA (ARRAY RESULT)                                   (* jop: "23-Jun-86 22:23")

          (* *)


    (if (EARRAY-SCALARP ARRAY)
	then (FABS ARRAY)
      else [bind (ARRAYBASE ←(ARRAYBASE ARRAY))
		     (RESULTBASE ←(ARRAYBASE RESULT)) for I from 0 upto (MUL2 (
										EARRAY-TOTAL-SIZE
											RESULT))
		by 2 do (\PUTBASEFLOATP RESULTBASE I (UFABS (\GETBASEFLOATP ARRAYBASE I]
	     RESULT])

(EARRAY-FLOAT-DIFFERENCE
  [LAMBDA (ARRAY1 ARRAY2 RESULT)                             (* jop: "23-Jun-86 22:23")

          (* *)


    (if (AND (EARRAY-SCALARP ARRAY1)
		 (EARRAY-SCALARP ARRAY2))
	then (DIFFERENCE ARRAY1 ARRAY2)
      else (if (EARRAY-SCALARP ARRAY1)
		 then [bind (ARRAYBASE2 ←(ARRAYBASE ARRAY2))
				(RESULTBASE ←(ARRAYBASE RESULT))
				(SCALAR ←(FLOAT ARRAY1)) declare (TYPE FLOATP SCALAR)
			   for I from 0 upto (MUL2 (EARRAY-TOTAL-SIZE RESULT)) by 2
			   do (\PUTBASEFLOATP RESULTBASE I (FDIFFERENCE SCALAR
									      (\GETBASEFLOATP
										ARRAYBASE2 I]
	       elseif (EARRAY-SCALARP ARRAY2)
		 then (bind (ARRAYBASE1 ←(ARRAYBASE ARRAY1))
				(RESULTBASE ←(ARRAYBASE RESULT))
				(SCALAR ←(FLOAT ARRAY2)) declare (TYPE FLOATP SCALAR)
			   for I from 0 upto (MUL2 (EARRAY-TOTAL-SIZE RESULT)) by 2
			   do (\PUTBASEFLOATP RESULTBASE I (FDIFFERENCE (\GETBASEFLOATP
										ARRAYBASE1 I)
									      SCALAR)))
	       else (\BLKFDIFF (ARRAYBASE ARRAY1)
				   (ARRAYBASE ARRAY2)
				   (ARRAYBASE RESULT)
				   (EARRAY-TOTAL-SIZE RESULT)))
	     RESULT])

(EARRAY-FLOAT-FIX
  [LAMBDA (ARRAY RESULT)                                   (* jop: "23-Jun-86 22:23")

          (* *)


    (if (EARRAY-SCALARP ARRAY)
	then (FIX ARRAY)
      else (bind (ARRAYBASE ←(ARRAYBASE ARRAY))
		     (LINEARIZEDRESULT ←(EARRAY-LINEARIZE RESULT)) for I from 0
		upto (EARRAY-TOTAL-SIZE RESULT) do (ASET (UFIX (\GETBASEFLOATP
									   ARRAYBASE
									   (MUL2 I)))
								 LINEARIZEDRESULT I))
	     RESULT])

(EARRAY-FLOAT-FLOAT
  [LAMBDA (ARRAY RESULT)                                   (* jop: "23-Jun-86 22:23")

          (* *)


    (if (EARRAY-SCALARP ARRAY)
	then (FLOAT ARRAY)
      else [bind (LINEARIZEDARRAY ←(EARRAY-LINEARIZE ARRAY))
		     (RESULTBASE ←(ARRAYBASE RESULT)) for I from 0 upto (EARRAY-TOTAL-SIZE
										  RESULT)
		do (\PUTBASEFLOATP RESULTBASE (MUL2 I)
				       (FLOAT (AREF LINEARIZEDARRAY I]
	     RESULT])

(EARRAY-FLOAT-FN
  [LAMBDA (OP ARRAY RESULT)                                  (* jop: "13-Jun-86 11:53")

          (* *)


    (if (EQ (EARRAY-ELEMENT-TYPE RESULT)
		(QUOTE SINGLE-FLOAT))
	then (EARRAY-FLOAT-FLOAT ARRAY RESULT)
      else (EARRAY-GENERIC-MONADIC-APPLY (FUNCTION FLOAT)
					     ARRAY RESULT])

(EARRAY-FLOAT-MAX
  [LAMBDA (ARRAY1 ARRAY2 RESULT)                             (* jop: "23-Jun-86 22:23")

          (* *)


    (if (AND (EARRAY-SCALARP ARRAY1)
		 (EARRAY-SCALARP ARRAY2))
	then (MAX ARRAY1 ARRAY2)
      else [if (EARRAY-SCALARP ARRAY1)
		 then (bind (ARRAYBASE2 ←(ARRAYBASE ARRAY2))
				(RESULTBASE ←(ARRAYBASE RESULT))
				(SCALAR ←(FLOAT ARRAY1))
				ELT declare (TYPE FLOATP SCALAR ELT) for I from 0
			   upto (MUL2 (EARRAY-TOTAL-SIZE RESULT)) by 2
			   do (SETQ ELT (\GETBASEFLOATP ARRAYBASE2 I))
				(if (UFGREATERP SCALAR ELT)
				    then (\PUTBASEFLOATP RESULTBASE I SCALAR)
				  else (\PUTBASEFLOATP RESULTBASE I ELT)))
	       elseif (EARRAY-SCALARP ARRAY2)
		 then (bind (ARRAYBASE1 ←(ARRAYBASE ARRAY1))
				(RESULTBASE ←(ARRAYBASE RESULT))
				(SCALAR ←(FLOAT ARRAY2))
				ELT declare (TYPE FLOATP SCALAR ELT) for I from 0
			   upto (MUL2 (EARRAY-TOTAL-SIZE RESULT)) by 2
			   do (SETQ ELT (\GETBASEFLOATP ARRAYBASE1 I))
				(if (UFGREATERP ELT SCALAR)
				    then (\PUTBASEFLOATP RESULTBASE I ELT)
				  else (\PUTBASEFLOATP RESULTBASE I SCALAR)))
	       else (bind (ARRAYBASE1 ←(ARRAYBASE ARRAY1))
			      (ARRAYBASE2 ←(ARRAYBASE ARRAY2))
			      (RESULTBASE ←(ARRAYBASE RESULT))
			      ELT1 ELT2 declare (TYPE FLOATP ELT1 ELT2) for I from 0
			 upto (MUL2 (EARRAY-TOTAL-SIZE RESULT)) by 2
			 do (SETQ ELT1 (\GETBASEFLOATP ARRAYBASE1 I))
			      (SETQ ELT2 (\GETBASEFLOATP ARRAYBASE2 I))
			      (if (UFGREATERP ELT1 ELT2)
				  then (\PUTBASEFLOATP RESULTBASE I ELT1)
				else (\PUTBASEFLOATP RESULTBASE I ELT2]
	     RESULT])

(EARRAY-FLOAT-MAX-REDUCE
  [LAMBDA (FLOATVECTOR)                                      (* jop: "17-Jun-86 16:32")

          (* *)


    (LET ((SIZE (EARRAY-TOTAL-SIZE FLOATVECTOR)))
         (if (IGREATERP SIZE 0)
	     then (AREF FLOATVECTOR (\BLKFMAX (ARRAYBASE FLOATVECTOR)
						    0 SIZE])

(EARRAY-FLOAT-MIN
  [LAMBDA (ARRAY1 ARRAY2 RESULT)                             (* jop: "23-Jun-86 22:23")

          (* *)


    (if (AND (EARRAY-SCALARP ARRAY1)
		 (EARRAY-SCALARP ARRAY2))
	then (MIN ARRAY1 ARRAY2)
      else [if (EARRAY-SCALARP ARRAY1)
		 then (bind (ARRAYBASE2 ←(ARRAYBASE ARRAY2))
				(RESULTBASE ←(ARRAYBASE RESULT))
				(SCALAR ←(FLOAT ARRAY1))
				ELT declare (TYPE FLOATP SCALAR ELT) for I from 0
			   upto (MUL2 (EARRAY-TOTAL-SIZE RESULT)) by 2
			   do (SETQ ELT (\GETBASEFLOATP ARRAYBASE2 I))
				(if (UFLESSP SCALAR ELT)
				    then (\PUTBASEFLOATP RESULTBASE I SCALAR)
				  else (\PUTBASEFLOATP RESULTBASE I ELT)))
	       elseif (EARRAY-SCALARP ARRAY2)
		 then (bind (ARRAYBASE1 ←(ARRAYBASE ARRAY1))
				(RESULTBASE ←(ARRAYBASE RESULT))
				(SCALAR ←(FLOAT ARRAY2))
				ELT declare (TYPE FLOATP SCALAR ELT) for I from 0
			   upto (MUL2 (EARRAY-TOTAL-SIZE RESULT)) by 2
			   do (SETQ ELT (\GETBASEFLOATP ARRAYBASE1 I))
				(if (UFLESSP ELT SCALAR)
				    then (\PUTBASEFLOATP RESULTBASE I ELT)
				  else (\PUTBASEFLOATP RESULTBASE I SCALAR)))
	       else (bind (ARRAYBASE1 ←(ARRAYBASE ARRAY1))
			      (ARRAYBASE2 ←(ARRAYBASE ARRAY2))
			      (RESULTBASE ←(ARRAYBASE RESULT))
			      ELT1 ELT2 declare (TYPE FLOATP ELT1 ELT2) for I from 0
			 upto (MUL2 (EARRAY-TOTAL-SIZE RESULT)) by 2
			 do (SETQ ELT1 (\GETBASEFLOATP ARRAYBASE1 I))
			      (SETQ ELT2 (\GETBASEFLOATP ARRAYBASE2 I))
			      (if (UFLESSP ELT1 ELT2)
				  then (\PUTBASEFLOATP RESULTBASE I ELT1)
				else (\PUTBASEFLOATP RESULTBASE I ELT2]
	     RESULT])

(EARRAY-FLOAT-MIN-REDUCE
  [LAMBDA (FLOATVECTOR)                                      (* jop: "17-Jun-86 16:33")

          (* *)


    (LET ((SIZE (EARRAY-TOTAL-SIZE FLOATVECTOR)))
         (if (IGREATERP SIZE 0)
	     then (AREF FLOATVECTOR (\BLKFMIN (ARRAYBASE FLOATVECTOR)
						    0 SIZE])

(EARRAY-FLOAT-MINUS
  [LAMBDA (ARRAY RESULT)                                   (* jop: "23-Jun-86 22:23")

          (* *)


    (if (EARRAY-SCALARP ARRAY)
	then (FMINUS ARRAY)
      else [bind (ARRAYBASE ←(ARRAYBASE ARRAY))
		     (RESULTBASE ←(ARRAYBASE RESULT)) for I from 0 upto (MUL2 (
										EARRAY-TOTAL-SIZE
											RESULT))
		by 2 do (\PUTBASEFLOATP RESULTBASE I (UFMINUS (\GETBASEFLOATP ARRAYBASE I]
	     RESULT])

(EARRAY-FLOAT-PLUS
  [LAMBDA (ARRAY1 ARRAY2 RESULT)                             (* jop: "23-Jun-86 22:23")

          (* *)


    (if (AND (EARRAY-SCALARP ARRAY1)
		 (EARRAY-SCALARP ARRAY2))
	then (PLUS ARRAY1 ARRAY2)
      else (if (EARRAY-SCALARP ARRAY1)
		 then [bind (ARRAYBASE2 ←(ARRAYBASE ARRAY2))
				(RESULTBASE ←(ARRAYBASE RESULT))
				(SCALAR ←(FLOAT ARRAY1)) declare (TYPE FLOATP SCALAR)
			   for I from 0 upto (MUL2 (EARRAY-TOTAL-SIZE RESULT)) by 2
			   do (\PUTBASEFLOATP RESULTBASE I (FPLUS SCALAR (\GETBASEFLOATP
									  ARRAYBASE2 I]
	       elseif (EARRAY-SCALARP ARRAY2)
		 then (bind (ARRAYBASE1 ←(ARRAYBASE ARRAY1))
				(RESULTBASE ←(ARRAYBASE RESULT))
				(SCALAR ←(FLOAT ARRAY2)) declare (TYPE FLOATP SCALAR)
			   for I from 0 upto (MUL2 (EARRAY-TOTAL-SIZE RESULT)) by 2
			   do (\PUTBASEFLOATP RESULTBASE I (FPLUS (\GETBASEFLOATP ARRAYBASE1 
											  I)
									SCALAR)))
	       else (\BLKFPLUS (ARRAYBASE ARRAY1)
				   (ARRAYBASE ARRAY2)
				   (ARRAYBASE RESULT)
				   (EARRAY-TOTAL-SIZE RESULT)))
	     RESULT])

(EARRAY-FLOAT-PLUS-REDUCE
  [LAMBDA (FLOATVECTOR)                                      (* jop: "17-Jun-86 16:30")

          (* *)


    (LET ((SIZE (EARRAY-TOTAL-SIZE FLOATVECTOR)))
         (if (IGREATERP SIZE 0)
	     then (\POLYNOM 1.0 (ARRAYBASE FLOATVECTOR)
				(SUB1 SIZE])

(EARRAY-FLOAT-PLUS-SCAN
  [LAMBDA (FLOATSOURCE FLOATSINK)                            (* jop: "17-Jun-86 16:48")

          (* *)


    (LET ((SIZE (EARRAY-TOTAL-SIZE FLOATSOURCE)))
         (bind (SOURCEBASE ←(ARRAYBASE FLOATSOURCE))
		 (SINKBASE ←(ARRAYBASE FLOATSINK))
		 (TOTAL ← 0.0) declare (TYPE FLOATP TOTAL) for I from 0 upto (MUL2 SIZE)
	    by 2
	    do (SETQ TOTAL (FPLUS TOTAL (\GETBASEFLOATP SOURCEBASE I)))
		 (\PUTBASEFLOATP SINKBASE I TOTAL))
     FLOATSINK])

(EARRAY-FLOAT-QUOTIENT
  [LAMBDA (ARRAY1 ARRAY2 RESULT)                             (* jop: "23-Jun-86 22:23")

          (* *)


    (if (AND (EARRAY-SCALARP ARRAY1)
		 (EARRAY-SCALARP ARRAY2))
	then (QUOTIENT ARRAY1 ARRAY2)
      else [if (EARRAY-SCALARP ARRAY1)
		 then [bind (ARRAYBASE2 ←(ARRAYBASE ARRAY2))
				(RESULTBASE ←(ARRAYBASE RESULT))
				(SCALAR ←(FLOAT ARRAY1)) declare (TYPE FLOATP SCALAR)
			   for I from 0 upto (MUL2 (EARRAY-TOTAL-SIZE RESULT)) by 2
			   do (\PUTBASEFLOATP RESULTBASE I (FQUOTIENT SCALAR (\GETBASEFLOATP
									      ARRAYBASE2 I]
	       elseif (EARRAY-SCALARP ARRAY2)
		 then (bind (ARRAYBASE1 ←(ARRAYBASE ARRAY1))
				(RESULTBASE ←(ARRAYBASE RESULT))
				(SCALAR ←(FLOAT ARRAY2)) declare (TYPE FLOATP SCALAR)
			   for I from 0 upto (MUL2 (EARRAY-TOTAL-SIZE RESULT)) by 2
			   do (\PUTBASEFLOATP RESULTBASE I (FQUOTIENT (\GETBASEFLOATP 
										       ARRAYBASE1 I)
									    SCALAR)))
	       else (bind (ARRAYBASE1 ←(ARRAYBASE ARRAY1))
			      (ARRAYBASE2 ←(ARRAYBASE ARRAY2))
			      (RESULTBASE ←(ARRAYBASE RESULT)) for I from 0
			 upto (MUL2 (EARRAY-TOTAL-SIZE RESULT)) by 2
			 do (\PUTBASEFLOATP RESULTBASE I (FQUOTIENT (\GETBASEFLOATP 
										       ARRAYBASE1 I)
									  (\GETBASEFLOATP 
										       ARRAYBASE2 I]
	     RESULT])

(EARRAY-FLOAT-RECIPROCAL
  [LAMBDA (ARRAY RESULT)                                   (* jop: "23-Jun-86 22:23")

          (* *)


    (if (EARRAY-SCALARP ARRAY)
	then (FQUOTIENT 1.0 ARRAY)
      else [bind (ARRAYBASE ←(ARRAYBASE ARRAY))
		     (RESULTBASE ←(ARRAYBASE RESULT)) for I from 0 upto (MUL2 (
										EARRAY-TOTAL-SIZE
											RESULT))
		by 2 do (\PUTBASEFLOATP RESULTBASE I (FQUOTIENT 1.0 (\GETBASEFLOATP 
											ARRAYBASE I]
	     RESULT])

(EARRAY-FLOAT-REMAINDER
  [LAMBDA (ARRAY1 ARRAY2 RESULT)                             (* jop: "23-Jun-86 22:23")

          (* *)


    (if (AND (EARRAY-SCALARP ARRAY1)
		 (EARRAY-SCALARP ARRAY2))
	then (REMAINDER ARRAY1 ARRAY2)
      else [if (EARRAY-SCALARP ARRAY1)
		 then [bind (ARRAYBASE2 ←(ARRAYBASE ARRAY2))
				(RESULTBASE ←(ARRAYBASE RESULT))
				(SCALAR ←(FLOAT ARRAY1)) declare (TYPE FLOATP SCALAR)
			   for I from 0 upto (MUL2 (EARRAY-TOTAL-SIZE RESULT)) by 2
			   do (\PUTBASEFLOATP RESULTBASE I (UFREMAINDER SCALAR
									      (\GETBASEFLOATP
										ARRAYBASE2 I]
	       elseif (EARRAY-SCALARP ARRAY2)
		 then (bind (ARRAYBASE1 ←(ARRAYBASE ARRAY1))
				(RESULTBASE ←(ARRAYBASE RESULT))
				(SCALAR ←(FLOAT ARRAY2)) declare (TYPE FLOATP SCALAR)
			   for I from 0 upto (MUL2 (EARRAY-TOTAL-SIZE RESULT)) by 2
			   do (\PUTBASEFLOATP RESULTBASE I (UFREMAINDER (\GETBASEFLOATP
										ARRAYBASE1 I)
									      SCALAR)))
	       else (bind (ARRAYBASE1 ←(ARRAYBASE ARRAY1))
			      (ARRAYBASE2 ←(ARRAYBASE ARRAY2))
			      (RESULTBASE ←(ARRAYBASE RESULT)) for I from 0
			 upto (MUL2 (EARRAY-TOTAL-SIZE RESULT)) by 2
			 do (\PUTBASEFLOATP RESULTBASE I (UFREMAINDER (\GETBASEFLOATP 
										       ARRAYBASE1 I)
									    (\GETBASEFLOATP 
										       ARRAYBASE2 I]
	     RESULT])

(EARRAY-FLOAT-TIMES
  [LAMBDA (ARRAY1 ARRAY2 RESULT)                             (* jop: "23-Jun-86 22:24")

          (* *)


    (if (AND (EARRAY-SCALARP ARRAY1)
		 (EARRAY-SCALARP ARRAY2))
	then (TIMES ARRAY1 ARRAY2)
      else (if (EARRAY-SCALARP ARRAY1)
		 then [bind (ARRAYBASE2 ←(ARRAYBASE ARRAY2))
				(RESULTBASE ←(ARRAYBASE RESULT))
				(SCALAR ←(FLOAT ARRAY1)) declare (TYPE FLOATP SCALAR)
			   for I from 0 upto (MUL2 (EARRAY-TOTAL-SIZE RESULT)) by 2
			   do (\PUTBASEFLOATP RESULTBASE I (FTIMES SCALAR (\GETBASEFLOATP
									   ARRAYBASE2 I]
	       elseif (EARRAY-SCALARP ARRAY2)
		 then (bind (ARRAYBASE1 ←(ARRAYBASE ARRAY1))
				(RESULTBASE ←(ARRAYBASE RESULT))
				(SCALAR ←(FLOAT ARRAY2)) declare (TYPE FLOATP SCALAR)
			   for I from 0 upto (MUL2 (EARRAY-TOTAL-SIZE RESULT)) by 2
			   do (\PUTBASEFLOATP RESULTBASE I (FTIMES (\GETBASEFLOATP ARRAYBASE1 
											   I)
									 SCALAR)))
	       else (\BLKFTIMES (ARRAYBASE ARRAY1)
				    (ARRAYBASE ARRAY2)
				    (ARRAYBASE RESULT)
				    (EARRAY-TOTAL-SIZE RESULT)))
	     RESULT])

(EARRAY-FLOAT-TIMES-SCAN
  [LAMBDA (FLOATSOURCE FLOATSINK)                            (* jop: "17-Jun-86 16:47")

          (* *)


    (LET ((SIZE (EARRAY-TOTAL-SIZE FLOATSOURCE)))
         (bind (SOURCEBASE ←(ARRAYBASE FLOATSOURCE))
		 (SINKBASE ←(ARRAYBASE FLOATSINK))
		 (PROD ← 1.0) declare (TYPE FLOATP PROD) for I from 0 upto (MUL2 SIZE)
	    by 2
	    do (SETQ PROD (FTIMES PROD (\GETBASEFLOATP SOURCEBASE I)))
		 (\PUTBASEFLOATP SINKBASE I PROD))
     FLOATSINK])

(EARRAY-FLOOR
  [LAMBDA (ARRAY RESULT)                                   (* jop: "15-Jun-86 15:41")

          (* *)


    (EARRAY-MONADIC-APPLY (FUNCTION FLOOR)
			    ARRAY RESULT])

(EARRAY-FLOOR-FN
  [LAMBDA (OP ARRAY RESULT)                                  (* jop: "23-Jun-86 12:05")

          (* *)


    (EARRAY-GENERIC-MONADIC-APPLY (FUNCTION SCALAR-FLOOR)
				    ARRAY RESULT])

(EARRAY-GENERIC-DIFFERENCE
  [LAMBDA (ARRAY1 ARRAY2 RESULT)                             (* jop: "23-Jun-86 22:24")

          (* *)


    (if (AND (EARRAY-SCALARP ARRAY1)
		 (EARRAY-SCALARP ARRAY2))
	then (DIFFERENCE ARRAY1 ARRAY2)
      else (if (EARRAY-SCALARP ARRAY1)
		 then (bind (LINEARIZEDARRAY ←(EARRAY-LINEARIZE ARRAY2))
				(LINEARIZEDRESULT ←(EARRAY-LINEARIZE RESULT)) for I from 0
			   upto (EARRAY-TOTAL-SIZE RESULT) do (ASET (DIFFERENCE
									      ARRAY1
									      (AREF LINEARIZEDARRAY 
										      I))
									    LINEARIZEDRESULT I))
	       elseif (EARRAY-SCALARP ARRAY2)
		 then (bind (LINEARIZEDARRAY ←(EARRAY-LINEARIZE ARRAY1))
				(LINEARIZEDRESULT ←(EARRAY-LINEARIZE RESULT)) for I from 0
			   upto (EARRAY-TOTAL-SIZE RESULT) do (ASET (DIFFERENCE
									      (AREF LINEARIZEDARRAY 
										      I)
									      ARRAY2)
									    LINEARIZEDRESULT I))
	       else (bind (LINEARIZEDARRAY1 ←(EARRAY-LINEARIZE ARRAY1))
			      (LINEARIZEDARRAY2 ←(EARRAY-LINEARIZE ARRAY2))
			      (LINEARIZEDRESULT ←(EARRAY-LINEARIZE RESULT)) for I from 0
			 upto (EARRAY-TOTAL-SIZE RESULT) do (ASET (DIFFERENCE (AREF
											  
										 LINEARIZEDARRAY1 I)
											(AREF
											  
										 LINEARIZEDARRAY2 I))
									  LINEARIZEDRESULT I)))
	     RESULT])

(EARRAY-GENERIC-PLUS
  [LAMBDA (ARRAY1 ARRAY2 RESULT)                             (* jop: "23-Jun-86 22:24")

          (* *)


    (if (AND (EARRAY-SCALARP ARRAY1)
		 (EARRAY-SCALARP ARRAY2))
	then (PLUS ARRAY1 ARRAY2)
      else (if (EARRAY-SCALARP ARRAY1)
		 then (bind (LINEARIZEDARRAY ←(EARRAY-LINEARIZE ARRAY2))
				(LINEARIZEDRESULT ←(EARRAY-LINEARIZE RESULT)) for I from 0
			   upto (EARRAY-TOTAL-SIZE RESULT) do (ASET (PLUS ARRAY1
										    (AREF 
										  LINEARIZEDARRAY I))
									    LINEARIZEDRESULT I))
	       elseif (EARRAY-SCALARP ARRAY2)
		 then (bind (LINEARIZEDARRAY ←(EARRAY-LINEARIZE ARRAY1))
				(LINEARIZEDRESULT ←(EARRAY-LINEARIZE RESULT)) for I from 0
			   upto (EARRAY-TOTAL-SIZE RESULT) do (ASET (PLUS (AREF 
										  LINEARIZEDARRAY I)
										    ARRAY2)
									    LINEARIZEDRESULT I))
	       else (bind (LINEARIZEDARRAY1 ←(EARRAY-LINEARIZE ARRAY1))
			      (LINEARIZEDARRAY2 ←(EARRAY-LINEARIZE ARRAY2))
			      (LINEARIZEDRESULT ←(EARRAY-LINEARIZE RESULT)) for I from 0
			 upto (EARRAY-TOTAL-SIZE RESULT) do (ASET (PLUS (AREF 
										 LINEARIZEDARRAY1 I)
										  (AREF 
										 LINEARIZEDARRAY2 I))
									  LINEARIZEDRESULT I)))
	     RESULT])

(EARRAY-GENERIC-PLUS-REDUCE
  [LAMBDA (VECTOR)                                         (* jop: "17-Jun-86 16:30")

          (* *)


    (LET ((SIZE (EARRAY-TOTAL-SIZE VECTOR)))
         (if (IGREATERP SIZE 0)
	     then (bind (RESULT ← 0) for I from 0 upto SIZE
		       do (SETQ RESULT (PLUS RESULT (AREF VECTOR I))) finally (RETURN
											  RESULT])

(EARRAY-GENERIC-QUOTIENT
  [LAMBDA (ARRAY1 ARRAY2 RESULT)                             (* jop: "23-Jun-86 22:24")

          (* *)


    (if (AND (EARRAY-SCALARP ARRAY1)
		 (EARRAY-SCALARP ARRAY2))
	then (PLUS ARRAY1 ARRAY2)
      else (if (EARRAY-SCALARP ARRAY1)
		 then (bind (LINEARIZEDARRAY ←(EARRAY-LINEARIZE ARRAY2))
				(LINEARIZEDRESULT ←(EARRAY-LINEARIZE RESULT)) for I from 0
			   upto (EARRAY-TOTAL-SIZE RESULT) do (ASET (QUOTIENT ARRAY1
											(AREF
											  
										  LINEARIZEDARRAY I))
									    LINEARIZEDRESULT I))
	       elseif (EARRAY-SCALARP ARRAY2)
		 then (bind (LINEARIZEDARRAY ←(EARRAY-LINEARIZE ARRAY1))
				(LINEARIZEDRESULT ←(EARRAY-LINEARIZE RESULT)) for I from 0
			   upto (EARRAY-TOTAL-SIZE RESULT) do (ASET (QUOTIENT (AREF
											  
										  LINEARIZEDARRAY I)
											ARRAY2)
									    LINEARIZEDRESULT I))
	       else (bind (LINEARIZEDARRAY1 ←(EARRAY-LINEARIZE ARRAY1))
			      (LINEARIZEDARRAY2 ←(EARRAY-LINEARIZE ARRAY2))
			      (LINEARIZEDRESULT ←(EARRAY-LINEARIZE RESULT)) for I from 0
			 upto (EARRAY-TOTAL-SIZE RESULT) do (ASET (QUOTIENT (AREF 
										 LINEARIZEDARRAY1 I)
										      (AREF 
										 LINEARIZEDARRAY2 I))
									  LINEARIZEDRESULT I)))
	     RESULT])

(EARRAY-GENERIC-TIMES
  [LAMBDA (ARRAY1 ARRAY2 RESULT)                             (* jop: "23-Jun-86 22:24")

          (* *)


    (if (AND (EARRAY-SCALARP ARRAY1)
		 (EARRAY-SCALARP ARRAY2))
	then (PLUS ARRAY1 ARRAY2)
      else (if (EARRAY-SCALARP ARRAY1)
		 then (bind (LINEARIZEDARRAY ←(EARRAY-LINEARIZE ARRAY2))
				(LINEARIZEDRESULT ←(EARRAY-LINEARIZE RESULT)) for I from 0
			   upto (EARRAY-TOTAL-SIZE RESULT) do (ASET (TIMES ARRAY1
										     (AREF 
										  LINEARIZEDARRAY I))
									    LINEARIZEDRESULT I))
	       elseif (EARRAY-SCALARP ARRAY2)
		 then (bind (LINEARIZEDARRAY ←(EARRAY-LINEARIZE ARRAY1))
				(LINEARIZEDRESULT ←(EARRAY-LINEARIZE RESULT)) for I from 0
			   upto (EARRAY-TOTAL-SIZE RESULT) do (ASET (TIMES (AREF 
										  LINEARIZEDARRAY I)
										     ARRAY2)
									    LINEARIZEDRESULT I))
	       else (bind (LINEARIZEDARRAY1 ←(EARRAY-LINEARIZE ARRAY1))
			      (LINEARIZEDARRAY2 ←(EARRAY-LINEARIZE ARRAY2))
			      (LINEARIZEDRESULT ←(EARRAY-LINEARIZE RESULT)) for I from 0
			 upto (EARRAY-TOTAL-SIZE RESULT) do (ASET (TIMES (AREF 
										 LINEARIZEDARRAY1 I)
										   (AREF 
										 LINEARIZEDARRAY2 I))
									  LINEARIZEDRESULT I)))
	     RESULT])

(EARRAY-MAX
  [LAMBDA (ARRAY1 ARRAY2 RESULT)                             (* jop: "13-Jun-86 12:28")

          (* *)


    (EARRAY-DYADIC-APPLY (FUNCTION MAX)
			   ARRAY1 ARRAY2 RESULT (EARRAY-COMMON-TYPE (EARRAY-ELEMENT-TYPE ARRAY1)
								      (EARRAY-ELEMENT-TYPE ARRAY2])

(EARRAY-MAX-FN
  [LAMBDA (OP ARRAY1 ARRAY2 RESULT)                          (* jop: "13-Jun-86 12:22")

          (* *)


    (if (AND (USE-FLOAT-P ARRAY1 ARRAY2)
		 (EQ (EARRAY-ELEMENT-TYPE RESULT)
		       (QUOTE SINGLE-FLOAT)))
	then (EARRAY-FLOAT-MAX ARRAY1 ARRAY2 RESULT)
      else (EARRAY-GENERIC-DYADIC-APPLY (FUNCTION MAX)
					    ARRAY1 ARRAY2 RESULT])

(EARRAY-MAX-REDUCE
  [LAMBDA (ARRAY AXIS RESULT)                              (* jop: "12-Jun-86 22:37")

          (* *)


    (EARRAY-REDUCE (FUNCTION MAX)
		     ARRAY AXIS RESULT (EARRAY-ELEMENT-TYPE ARRAY])

(EARRAY-MAX-REDUCE-FN
  [LAMBDA (VECTOR)                                         (* jop: "17-Jun-86 16:32")

          (* *)


    (if (EQ (EARRAY-ELEMENT-TYPE VECTOR)
		(QUOTE SINGLE-FLOAT))
	then (EARRAY-FLOAT-MAX-REDUCE VECTOR)
      else (EARRAY-GENERIC-VECTOR-REDUCE (FUNCTION MAX)
					     VECTOR])

(EARRAY-MEAN
  [LAMBDA (VECTOR)                                         (* jop: "17-Jun-86 16:07")

          (* *)


    (FQUOTIENT (EARRAY-PLUS-REDUCE VECTOR)
		 (EARRAY-TOTAL-SIZE VECTOR])

(EARRAY-MEAN-REDUCE
  [LAMBDA (ARRAY AXIS RESULT)                              (* jop: "17-Jun-86 16:10")

          (* *)


    (EARRAY-REDUCE (FUNCTION MEAN)
		     ARRAY AXIS RESULT (EARRAY-ELEMENT-TYPE ARRAY])

(EARRAY-MIN
  [LAMBDA (ARRAY1 ARRAY2 RESULT)                             (* jop: "13-Jun-86 12:29")

          (* *)


    (EARRAY-DYADIC-APPLY (FUNCTION MIN)
			   ARRAY1 ARRAY2 RESULT (EARRAY-COMMON-TYPE (EARRAY-ELEMENT-TYPE ARRAY1)
								      (EARRAY-ELEMENT-TYPE ARRAY2])

(EARRAY-MIN-FN
  [LAMBDA (OP ARRAY1 ARRAY2 RESULT)                          (* jop: "13-Jun-86 12:23")

          (* *)


    (if (AND (USE-FLOAT-P ARRAY1 ARRAY2)
		 (EQ (EARRAY-ELEMENT-TYPE RESULT)
		       (QUOTE SINGLE-FLOAT)))
	then (EARRAY-FLOAT-MIN ARRAY1 ARRAY2 RESULT)
      else (EARRAY-GENERIC-DYADIC-APPLY (FUNCTION MIN)
					    ARRAY1 ARRAY2 RESULT])

(EARRAY-MIN-REDUCE
  [LAMBDA (ARRAY AXIS RESULT)                              (* jop: "12-Jun-86 22:35")

          (* *)


    (EARRAY-REDUCE (FUNCTION MIN)
		     ARRAY AXIS RESULT (EARRAY-ELEMENT-TYPE ARRAY])

(EARRAY-MIN-REDUCE-FN
  [LAMBDA (VECTOR)                                         (* jop: "17-Jun-86 16:33")

          (* *)


    (if (EQ (EARRAY-ELEMENT-TYPE VECTOR)
		(QUOTE SINGLE-FLOAT))
	then (EARRAY-FLOAT-MIN-REDUCE VECTOR)
      else (EARRAY-GENERIC-VECTOR-REDUCE (FUNCTION MIN)
					     VECTOR])

(EARRAY-MINUS
  [LAMBDA (ARRAY RESULT)                                   (* jop: "13-Jun-86 12:12")

          (* *)


    (EARRAY-MONADIC-APPLY (FUNCTION MINUS)
			    ARRAY RESULT (EARRAY-ELEMENT-TYPE ARRAY])

(EARRAY-MINUS-FN
  [LAMBDA (OP ARRAY RESULT)                                  (* jop: "13-Jun-86 11:53")

          (* *)


    (if (AND (EQ (EARRAY-ELEMENT-TYPE ARRAY)
		       (QUOTE SINGLE-FLOAT))
		 (EQ (EARRAY-ELEMENT-TYPE RESULT)
		       (QUOTE SINGLE-FLOAT)))
	then (EARRAY-FLOAT-MINUS ARRAY RESULT)
      else (EARRAY-GENERIC-MONADIC-APPLY (FUNCTION MINUS)
					     ARRAY RESULT])

(EARRAY-PLUS
  [LAMBDA (ARRAY1 ARRAY2 RESULT)                             (* jop: "13-Jun-86 12:29")

          (* *)


    (EARRAY-DYADIC-APPLY (FUNCTION PLUS)
			   ARRAY1 ARRAY2 RESULT (EARRAY-ARITH-TYPE (EARRAY-ELEMENT-TYPE ARRAY1)
								     (EARRAY-ELEMENT-TYPE ARRAY2])

(EARRAY-PLUS-FN
  [LAMBDA (OP ARRAY1 ARRAY2 RESULT)                          (* jop: "13-Jun-86 12:23")

          (* *)


    (if (AND (USE-FLOAT-P ARRAY1 ARRAY2)
		 (EQ (EARRAY-ELEMENT-TYPE RESULT)
		       (QUOTE SINGLE-FLOAT)))
	then (EARRAY-FLOAT-PLUS ARRAY1 ARRAY2 RESULT)
      else (EARRAY-GENERIC-PLUS ARRAY1 ARRAY2 RESULT])

(EARRAY-PLUS-REDUCE
  [LAMBDA (ARRAY AXIS RESULT)                              (* jop: "12-Jun-86 22:35")

          (* *)


    (EARRAY-REDUCE (FUNCTION PLUS)
		     ARRAY AXIS RESULT (EARRAY-ELEMENT-TYPE ARRAY])

(EARRAY-PLUS-REDUCE-FN
  [LAMBDA (VECTOR)                                         (* jop: "17-Jun-86 16:30")

          (* *)


    (if (EQ (EARRAY-ELEMENT-TYPE VECTOR)
		(QUOTE SINGLE-FLOAT))
	then (EARRAY-FLOAT-PLUS-REDUCE VECTOR)
      else (EARRAY-GENERIC-PLUS-REDUCE VECTOR])

(EARRAY-PLUS-SCAN
  [LAMBDA (ARRAY AXIS RESULT)                              (* jop: "12-Jun-86 22:56")

          (* *)


    (EARRAY-SCAN (FUNCTION PLUS)
		   ARRAY AXIS RESULT (EARRAY-ELEMENT-TYPE ARRAY])

(EARRAY-PLUS-SCAN-FN
  [LAMBDA (VECTOR RESULT)                                  (* jop: "17-Jun-86 16:48")

          (* *)


    (if (AND (EQ (EARRAY-ELEMENT-TYPE VECTOR)
		       (QUOTE SINGLE-FLOAT))
		 (EQ (EARRAY-ELEMENT-TYPE RESULT)
		       (QUOTE SINGLE-FLOAT)))
	then (EARRAY-FLOAT-PLUS-SCAN VECTOR RESULT)
      else (EARRAY-GENERIC-VECTOR-SCAN (QUOTE PLUS)
					   VECTOR RESULT])

(EARRAY-PLUS-SWEEP
  [LAMBDA (ARRAY1 ARRAY2 AXIS RESULT)                        (* jop: "17-Jun-86 21:17")

          (* *)


    (EARRAY-SWEEP (FUNCTION PLUS)
		    ARRAY1 ARRAY2 AXIS RESULT (EARRAY-ARITH-TYPE (EARRAY-ELEMENT-TYPE ARRAY1)
								   (EARRAY-ELEMENT-TYPE ARRAY2])

(EARRAY-QUOTIENT
  [LAMBDA (ARRAY1 ARRAY2 RESULT)                             (* jop: "13-Jun-86 12:30")

          (* *)


    (EARRAY-DYADIC-APPLY (FUNCTION QUOTIENT)
			   ARRAY1 ARRAY2 RESULT (EARRAY-ARITH-TYPE (EARRAY-ELEMENT-TYPE ARRAY1)
								     (EARRAY-ELEMENT-TYPE ARRAY2])

(EARRAY-QUOTIENT-FN
  [LAMBDA (OP ARRAY1 ARRAY2 RESULT)                          (* jop: "13-Jun-86 12:24")

          (* *)


    (if (AND (USE-FLOAT-P ARRAY1 ARRAY2)
		 (EQ (EARRAY-ELEMENT-TYPE RESULT)
		       (QUOTE SINGLE-FLOAT)))
	then (EARRAY-FLOAT-QUOTIENT ARRAY1 ARRAY2 RESULT)
      else (EARRAY-GENERIC-QUOTIENT ARRAY1 ARRAY2 RESULT])

(EARRAY-QUOTIENT-SWEEP
  [LAMBDA (ARRAY1 ARRAY2 AXIS RESULT)                        (* jop: "17-Jun-86 21:18")

          (* *)


    (EARRAY-SWEEP (FUNCTION QUOTIENT)
		    ARRAY1 ARRAY2 AXIS RESULT (EARRAY-ARITH-TYPE (EARRAY-ELEMENT-TYPE ARRAY1)
								   (EARRAY-ELEMENT-TYPE ARRAY2])

(EARRAY-RECIPROCAL
  [LAMBDA (ARRAY RESULT)                                   (* jop: "15-Jun-86 15:37")

          (* *)


    (EARRAY-MONADIC-APPLY (FUNCTION RECIPROCAL)
			    ARRAY RESULT (EARRAY-ELEMENT-TYPE ARRAY])

(EARRAY-RECIPROCAL-FN
  [LAMBDA (OP ARRAY RESULT)                                  (* jop: "13-Jun-86 11:45")

          (* *)


    (if (AND (EQ (EARRAY-ELEMENT-TYPE ARRAY)
		       (QUOTE SINGLE-FLOAT))
		 (EQ (EARRAY-ELEMENT-TYPE RESULT)
		       (QUOTE SINGLE-FLOAT)))
	then (EARRAY-FLOAT-RECIPROCAL ARRAY RESULT)
      else (EARRAY-GENERIC-MONADIC-APPLY (FUNCTION SCALAR-RECIPROCAL)
					     ARRAY RESULT])

(EARRAY-REMAINDER
  [LAMBDA (ARRAY1 ARRAY2 RESULT)                             (* jop: "13-Jun-86 12:31")

          (* *)


    (EARRAY-DYADIC-APPLY (FUNCTION REMAINDER)
			   ARRAY1 ARRAY2 RESULT (EARRAY-ARITH-TYPE (EARRAY-ELEMENT-TYPE ARRAY1)
								     (EARRAY-ELEMENT-TYPE ARRAY2])

(EARRAY-REMAINDER-FN
  [LAMBDA (OP ARRAY1 ARRAY2 RESULT)                          (* jop: "13-Jun-86 12:25")

          (* *)


    (if (AND (USE-FLOAT-P ARRAY1 ARRAY2)
		 (EQ (EARRAY-ELEMENT-TYPE RESULT)
		       (QUOTE SINGLE-FLOAT)))
	then (EARRAY-FLOAT-REMAINDER ARRAY1 ARRAY2 RESULT)
      else (EARRAY-GENERIC-DYADIC-APPLY (FUNCTION REMAINDER)
					    ARRAY1 ARRAY2 RESULT])

(EARRAY-ROUND
  [LAMBDA (ARRAY RESULT)                                   (* jop: "15-Jun-86 15:42")

          (* *)


    (EARRAY-MONADIC-APPLY (FUNCTION ROUND)
			    ARRAY RESULT])

(EARRAY-ROUND-FN
  [LAMBDA (OP ARRAY RESULT)                                  (* jop: "23-Jun-86 12:05")

          (* *)


    (EARRAY-GENERIC-MONADIC-APPLY (FUNCTION SCALAR-ROUND)
				    ARRAY RESULT])

(EARRAY-SAMPLE-VARIANCE
  [LAMBDA (VECTOR)                                         (* jop: "25-Jun-86 09:33")

          (* *)


    (LET ((M (EARRAY-MEAN VECTOR))
	  (SS (EARRAY-MATRIX-TIMES VECTOR VECTOR)))
         (FQUOTIENT (FDIFFERENCE SS (FTIMES M M))
		      (SUB1 (EARRAY-TOTAL-SIZE VECTOR])

(EARRAY-SAMPLE-VARIANCE-REDUCE
  [LAMBDA (ARRAY AXIS RESULT)                              (* jop: "25-Jun-86 09:08")

          (* *)


    (EARRAY-REDUCE (FUNCTION SAMPLE-VARIANCE)
		     ARRAY AXIS RESULT (EARRAY-ELEMENT-TYPE ARRAY])

(EARRAY-TIMES
  [LAMBDA (ARRAY1 ARRAY2 RESULT)                             (* jop: "13-Jun-86 12:30")

          (* *)


    (EARRAY-DYADIC-APPLY (FUNCTION TIMES)
			   ARRAY1 ARRAY2 RESULT (EARRAY-ARITH-TYPE (EARRAY-ELEMENT-TYPE ARRAY1)
								     (EARRAY-ELEMENT-TYPE ARRAY2])

(EARRAY-TIMES-FN
  [LAMBDA (OP ARRAY1 ARRAY2 RESULT)                          (* jop: "13-Jun-86 12:26")

          (* *)


    (if (AND (USE-FLOAT-P ARRAY1 ARRAY2)
		 (EQ (EARRAY-ELEMENT-TYPE RESULT)
		       (QUOTE SINGLE-FLOAT)))
	then (EARRAY-FLOAT-TIMES ARRAY1 ARRAY2 RESULT)
      else (EARRAY-GENERIC-TIMES ARRAY1 ARRAY2 RESULT])

(EARRAY-TIMES-SCAN
  [LAMBDA (ARRAY AXIS RESULT)                              (* jop: "12-Jun-86 22:56")

          (* *)


    (EARRAY-SCAN (FUNCTION TIMES)
		   ARRAY AXIS RESULT (EARRAY-ELEMENT-TYPE ARRAY])

(EARRAY-TIMES-SCAN-FN
  [LAMBDA (VECTOR RESULT)                                  (* jop: "17-Jun-86 16:48")

          (* *)


    (if (AND (EQ (EARRAY-ELEMENT-TYPE VECTOR)
		       (QUOTE SINGLE-FLOAT))
		 (EQ (EARRAY-ELEMENT-TYPE RESULT)
		       (QUOTE SINGLE-FLOAT)))
	then (EARRAY-FLOAT-TIMES-SCAN VECTOR RESULT)
      else (EARRAY-GENERIC-VECTOR-SCAN (FUNCTION TIMES)
					   VECTOR RESULT])

(EARRAY-TIMES-SWEEP
  [LAMBDA (ARRAY1 ARRAY2 AXIS RESULT)                        (* jop: "17-Jun-86 21:18")

          (* *)


    (EARRAY-SWEEP (FUNCTION TIMES)
		    ARRAY1 ARRAY2 AXIS RESULT (EARRAY-ARITH-TYPE (EARRAY-ELEMENT-TYPE ARRAY1)
								   (EARRAY-ELEMENT-TYPE ARRAY2])

(EARRAY-VARIANCE
  [LAMBDA (VECTOR)                                         (* jop: "25-Jun-86 09:33")

          (* *)


    (LET ((M (EARRAY-MEAN VECTOR))
	  (SS (EARRAY-MATRIX-TIMES VECTOR VECTOR)))
         (FQUOTIENT (FDIFFERENCE SS (FTIMES M M))
		      (EARRAY-TOTAL-SIZE VECTOR])

(EARRAY-VARIANCE-REDUCE
  [LAMBDA (ARRAY AXIS RESULT)                              (* jop: "24-Jun-86 23:37")

          (* *)


    (EARRAY-REDUCE (FUNCTION VARIANCE)
		     ARRAY AXIS RESULT (EARRAY-ELEMENT-TYPE ARRAY])
)
(DECLARE: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY 
(DECLARE: DOEVAL@COMPILE DONTCOPY

(LOCALVARS . T)
)
)
(PUTPROPS EARRAY-ARITHFNS COPYRIGHT ("Xerox Corporation" 1986))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (2390 39605 (EARRAY-ABS 2400 . 2634) (EARRAY-ABS-FN 2636 . 3084) (EARRAY-CEILING 3086 . 
3297) (EARRAY-CEILING-FN 3299 . 3527) (EARRAY-DIFFERENCE 3529 . 3851) (EARRAY-DIFFERENCE-FN 3853 . 
4256) (EARRAY-DIFFERENCE-SWEEP 4258 . 4582) (EARRAY-FIX 4584 . 4787) (EARRAY-FIX-FN 4789 . 5141) (
EARRAY-FLOAT 5143 . 5374) (EARRAY-FLOAT-ABS 5376 . 5888) (EARRAY-FLOAT-DIFFERENCE 5890 . 7166) (
EARRAY-FLOAT-FIX 7168 . 7688) (EARRAY-FLOAT-FLOAT 7690 . 8198) (EARRAY-FLOAT-FN 8200 . 8559) (
EARRAY-FLOAT-MAX 8561 . 10423) (EARRAY-FLOAT-MAX-REDUCE 10425 . 10760) (EARRAY-FLOAT-MIN 10762 . 12615
) (EARRAY-FLOAT-MIN-REDUCE 12617 . 12952) (EARRAY-FLOAT-MINUS 12954 . 13472) (EARRAY-FLOAT-PLUS 13474
 . 14710) (EARRAY-FLOAT-PLUS-REDUCE 14712 . 15032) (EARRAY-FLOAT-PLUS-SCAN 15034 . 15577) (
EARRAY-FLOAT-QUOTIENT 15579 . 17099) (EARRAY-FLOAT-RECIPROCAL 17101 . 17649) (EARRAY-FLOAT-REMAINDER 
17651 . 19185) (EARRAY-FLOAT-TIMES 19187 . 20434) (EARRAY-FLOAT-TIMES-SCAN 20436 . 20976) (
EARRAY-FLOOR 20978 . 21185) (EARRAY-FLOOR-FN 21187 . 21411) (EARRAY-GENERIC-DIFFERENCE 21413 . 22911) 
(EARRAY-GENERIC-PLUS 22913 . 24316) (EARRAY-GENERIC-PLUS-REDUCE 24318 . 24746) (
EARRAY-GENERIC-QUOTIENT 24748 . 26191) (EARRAY-GENERIC-TIMES 26193 . 27603) (EARRAY-MAX 27605 . 27915)
 (EARRAY-MAX-FN 27917 . 28336) (EARRAY-MAX-REDUCE 28338 . 28577) (EARRAY-MAX-REDUCE-FN 28579 . 28936) 
(EARRAY-MEAN 28938 . 29157) (EARRAY-MEAN-REDUCE 29159 . 29400) (EARRAY-MIN 29402 . 29712) (
EARRAY-MIN-FN 29714 . 30133) (EARRAY-MIN-REDUCE 30135 . 30374) (EARRAY-MIN-REDUCE-FN 30376 . 30733) (
EARRAY-MINUS 30735 . 30977) (EARRAY-MINUS-FN 30979 . 31437) (EARRAY-PLUS 31439 . 31749) (
EARRAY-PLUS-FN 31751 . 32136) (EARRAY-PLUS-REDUCE 32138 . 32379) (EARRAY-PLUS-REDUCE-FN 32381 . 32709)
 (EARRAY-PLUS-SCAN 32711 . 32946) (EARRAY-PLUS-SCAN-FN 32948 . 33407) (EARRAY-PLUS-SWEEP 33409 . 33721
) (EARRAY-QUOTIENT 33723 . 34041) (EARRAY-QUOTIENT-FN 34043 . 34440) (EARRAY-QUOTIENT-SWEEP 34442 . 
34762) (EARRAY-RECIPROCAL 34764 . 35012) (EARRAY-RECIPROCAL-FN 35014 . 35490) (EARRAY-REMAINDER 35492
 . 35812) (EARRAY-REMAINDER-FN 35814 . 36251) (EARRAY-ROUND 36253 . 36460) (EARRAY-ROUND-FN 36462 . 
36686) (EARRAY-SAMPLE-VARIANCE 36688 . 37032) (EARRAY-SAMPLE-VARIANCE-REDUCE 37034 . 37297) (
EARRAY-TIMES 37299 . 37611) (EARRAY-TIMES-FN 37613 . 38001) (EARRAY-TIMES-SCAN 38003 . 38240) (
EARRAY-TIMES-SCAN-FN 38242 . 38707) (EARRAY-TIMES-SWEEP 38709 . 39023) (EARRAY-VARIANCE 39025 . 39352)
 (EARRAY-VARIANCE-REDUCE 39354 . 39603)))))
STOP