[alexandria-devel] median function

Johan Ur Riise johan at riise-data.no
Fri Sep 11 23:32:41 UTC 2009


If you want this:

CL-USER> (float (alexandria:median '(1 2 3 4)))
2.5

CL-USER> (alexandria:median '(100 0 99 1 98 2 97 96))
193/2


Then you need this patch (the test is also wrong):

johan at perle:~/prg/cllibs/alexandria$ darcs diff -u
diff -rN -u old-alexandria/numbers.lisp new-alexandria/numbers.lisp
--- old-alexandria/numbers.lisp	2009-09-12 01:24:20.000000000 +0200
+++ new-alexandria/numbers.lisp	2009-09-12 01:24:20.000000000 +0200
@@ -97,7 +97,7 @@
          (middle (truncate length 2)))
     (if (oddp length)
         (aref vector middle)
-        (/ (+ (aref vector middle) (aref vector (1+ middle))) 2))))
+        (/ (+ (aref vector middle) (aref vector (1- middle))) 2))))
 
 (declaim (inline variance))
 (defun variance (sample &key (biased t))
diff -rN -u old-alexandria/tests.lisp new-alexandria/tests.lisp
--- old-alexandria/tests.lisp	2009-09-12 01:24:20.000000000 +0200
+++ new-alexandria/tests.lisp	2009-09-12 01:24:20.000000000 +0200
@@ -855,7 +855,7 @@
 
 (deftest median.2
     (median '(100 0 99 1 98 2 97 96))
-  195/2)
+  193/2)
 
 (deftest variance.1
     (variance (list 1 2 3))

johan at perle:~/prg/cllibs/alexandria$ 







More information about the alexandria-devel mailing list