summaryrefslogtreecommitdiff
path: root/src/floatfns.c
diff options
context:
space:
mode:
authorJim Blandy <jimb@redhat.com>1993-03-15 20:17:07 +0000
committerJim Blandy <jimb@redhat.com>1993-03-15 20:17:07 +0000
commit0660d88396962bac79fd20af03bc4a822131d704 (patch)
tree7818a7f48787ccc2ba61332e60266d6fa01f1aef /src/floatfns.c
parentd5ac71bc93d09d1d2c155739b8142d387b3b176f (diff)
downloademacs-0660d88396962bac79fd20af03bc4a822131d704.tar.gz
* floatfns.c (logb): Add extern declaration for this.
* floatfns.c (Flogb): Under SYSV, implement this using frexp.
Diffstat (limited to 'src/floatfns.c')
-rw-r--r--src/floatfns.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/floatfns.c b/src/floatfns.c
index 1235dad2f86..8dd3fdc7bd4 100644
--- a/src/floatfns.c
+++ b/src/floatfns.c
@@ -55,6 +55,9 @@ Lisp_Object Qarith_error;
#include <math.h>
+/* These declarations are omitted on some systems, like Ultrix. */
+extern double logb ();
+
#if defined(DOMAIN) && defined(SING) && defined(OVERFLOW)
/* If those are defined, then this is probably a `matherr' machine. */
# ifndef HAVE_MATHERR
@@ -620,17 +623,23 @@ This is the same as the exponent of a float.")
(arg)
Lisp_Object arg;
{
-#ifdef USG
- error ("SYSV apparently doesn't have a logb function; what to do?");
-#else
Lisp_Object val;
int value;
double f = extract_float (arg);
+#ifdef USG
+ {
+ int exp;
+
+ IN_FLOAT (frexp (f, &exp), "logb", arg);
+ XSET (val, Lisp_Int, exp-1);
+ }
+#else
IN_FLOAT (value = logb (f), "logb", arg);
XSET (val, Lisp_Int, value);
- return val;
#endif
+
+ return val;
}
/* the rounding functions */