From d9a105dabc32bd90487a3c12d6485366b766ffe0 Mon Sep 17 00:00:00 2001 From: Marius Gerbershagen Date: Tue, 5 Mar 2019 20:56:39 +0100 Subject: [PATCH] numlib.lsp: make signum return proper values for infinity/NaN --- src/lsp/numlib.lsp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/lsp/numlib.lsp b/src/lsp/numlib.lsp index 1358f91d7..17c590f87 100644 --- a/src/lsp/numlib.lsp +++ b/src/lsp/numlib.lsp @@ -126,7 +126,15 @@ Returns zero for non-complex numbers." "Args: (number) Returns a number that represents the sign of NUMBER. Returns NUMBER If it is zero. Otherwise, returns the value of (/ NUMBER (ABS NUMBER))" - (if (zerop x) x (/ x (abs x)))) + (if (complexp x) + (cis (atan (imagpart x) (realpart x))) + (let ((result (cond ((> x 0) 1) + ((< x 0) -1) + (t ; x is 0 or NaN + x)))) + (if (floatp x) + (float result x) + result)))) (defun cis (x) "Args: (radians)