/* Primitive operations on floating point for GNU Emacs Lisp interpreter.
- Copyright (C) 1988, 1993, 1994 Free Software Foundation, Inc.
+ Copyright (C) 1988, 1993, 1994, 1999 Free Software Foundation, Inc.
This file is part of GNU Emacs.
a domain error occurs.)
*/
-#include <signal.h>
-
#include <config.h>
+#include <signal.h>
+#include "lisp.h"
+#include "syssignal.h"
-/* Put this before lisp.h so that lisp.h can define DBL_DIG if not defined. */
#if STDC_HEADERS
#include <float.h>
#endif
-#include "lisp.h"
-#include "syssignal.h"
-
-#ifdef LISP_FLOAT_TYPE
-
/* If IEEE_FLOATING_POINT isn't defined, default it from FLT_*. */
#ifndef IEEE_FLOATING_POINT
#if (FLT_RADIX == 2 && FLT_MANT_DIG == 24 \
CHECK_NUMBER_OR_FLOAT (num, 0);
if (FLOATP (num))
- return XFLOAT (num)->data;
+ return XFLOAT_DATA (num);
return (double) XINT (num);
}
\f
XSETINT (val, acc);
return val;
}
- f1 = FLOATP (arg1) ? XFLOAT (arg1)->data : XINT (arg1);
- f2 = FLOATP (arg2) ? XFLOAT (arg2)->data : XINT (arg2);
+ f1 = FLOATP (arg1) ? XFLOAT_DATA (arg1) : XINT (arg1);
+ f2 = FLOATP (arg2) ? XFLOAT_DATA (arg2) : XINT (arg2);
/* Really should check for overflow, too */
if (f1 == 0.0 && f2 == 0.0)
f1 = 1.0;
CHECK_NUMBER_OR_FLOAT (arg, 0);
if (FLOATP (arg))
- IN_FLOAT (arg = make_float (fabs (XFLOAT (arg)->data)), "abs", arg);
+ IN_FLOAT (arg = make_float (fabs (XFLOAT_DATA (arg))), "abs", arg);
else if (XINT (arg) < 0)
XSETINT (arg, - XINT (arg));
return val;
}
-#endif /* LISP_FLOAT_TYPE */
-
/* the rounding functions */
CHECK_NUMBER_OR_FLOAT (divisor, 1);
-#ifdef LISP_FLOAT_TYPE
if (FLOATP (arg) || FLOATP (divisor))
{
double f1, f2;
- f1 = FLOATP (arg) ? XFLOAT (arg)->data : XINT (arg);
- f2 = (FLOATP (divisor) ? XFLOAT (divisor)->data : XINT (divisor));
+ f1 = FLOATP (arg) ? XFLOAT_DATA (arg) : XINT (arg);
+ f2 = (FLOATP (divisor) ? XFLOAT_DATA (divisor) : XINT (divisor));
if (! IEEE_FLOATING_POINT && f2 == 0)
Fsignal (Qarith_error, Qnil);
FLOAT_TO_INT2 (f1, arg, name, arg, divisor);
return arg;
}
-#endif
i1 = XINT (arg);
i2 = XINT (divisor);
return arg;
}
-#ifdef LISP_FLOAT_TYPE
if (FLOATP (arg))
{
double d;
- IN_FLOAT (d = (*double_round) (XFLOAT (arg)->data), name, arg);
+ IN_FLOAT (d = (*double_round) (XFLOAT_DATA (arg)), name, arg);
FLOAT_TO_INT (d, arg, name, arg);
}
-#endif
return arg;
}
"truncate");
}
-#ifdef LISP_FLOAT_TYPE
Lisp_Object
fmod_float (x, y)
{
double f1, f2;
- f1 = FLOATP (x) ? XFLOAT (x)->data : XINT (x);
- f2 = FLOATP (y) ? XFLOAT (y)->data : XINT (y);
+ f1 = FLOATP (x) ? XFLOAT_DATA (x) : XINT (x);
+ f2 = FLOATP (y) ? XFLOAT_DATA (y) : XINT (y);
if (! IEEE_FLOATING_POINT && f2 == 0)
Fsignal (Qarith_error, Qnil);
}
#endif /* HAVE_MATHERR */
+void
init_floatfns ()
{
#ifdef FLOAT_CATCH_SIGILL
in_float = 0;
}
-#else /* not LISP_FLOAT_TYPE */
-
-init_floatfns ()
-{}
-
-#endif /* not LISP_FLOAT_TYPE */
-
+void
syms_of_floatfns ()
{
-#ifdef LISP_FLOAT_TYPE
defsubr (&Sacos);
defsubr (&Sasin);
defsubr (&Satan);
defsubr (&Sabs);
defsubr (&Sfloat);
defsubr (&Slogb);
-#endif /* LISP_FLOAT_TYPE */
defsubr (&Sceiling);
defsubr (&Sfloor);
defsubr (&Sround);