From a49907b9b65ddc269fb851bc3f1ef73b6dd5ac6a Mon Sep 17 00:00:00 2001
From: Alex Shinn <ashinn@users.noreply.github.com>
Date: Sat, 13 Jul 2013 09:14:57 +0900
Subject: [PATCH] Fixing inexact comparisons to handle different signed
 arguments.

---
 lib/chibi/test.scm | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/lib/chibi/test.scm b/lib/chibi/test.scm
index b4891576..f73ca252 100644
--- a/lib/chibi/test.scm
+++ b/lib/chibi/test.scm
@@ -244,8 +244,13 @@
         (else #f)))
 
 (define (approx-equal? a b epsilon)
-  (< (abs (- 1 (abs (if (zero? b) (+ 1 a) (/ a b)))))
-     epsilon))
+  (cond
+   ((> (abs a) (abs b))
+    (approx-equal? b a epsilon))
+   ((zero? b)
+    (< (abs a) epsilon))
+   (else
+    (< (abs (/ (- a b) b)) epsilon))))
 
 (define (call-with-output-string proc)
   (let ((out (open-output-string)))