• Paul Eggert's avatar
    Simplify, document, and port floating-point. · c990426a
    Paul Eggert authored
    The porting part of this patch fixes bugs on non-IEEE platforms
    with frexp, ldexp, logb.
    * admin/CPP-DEFINES (HAVE_CBRT, HAVE_LOGB, logb): Remove.
    * configure.ac (logb, cbrt): Do not check for these functions,
    as they are not being used.
    * doc/lispref/numbers.texi (Float Basics, Arithmetic Operations, Math Functions):
    Document that / and mod (with floating point arguments), along
    with asin, acos, log, log10, expt and sqrt, return special values
    instead of signaling exceptions.
    (Float Basics): Document that logb operates on the absolute value
    of its argument.
    (Math Functions): Document that (log ARG BASE) also returns NaN if
    BASE is negative.  Document that (expt X Y) returns NaN if X is a
    finite negative number and Y a finite non-integer.
    * etc/NEWS: Document NaNs versus signaling-error change.
    * src/data.c, src/lisp.h (Qdomain_error, Qsingularity_error, Qunderflow_error):
    Now static.
    * src/floatfns.c: Simplify discussion of functions that Emacs doesn't
    support, by removing commented-out code and briefly listing the
    C89 functions excluded.  The commented-out stuff was confusing
    maintenance, e.g., we thought we needed cbrt but it was commented out.
    (logb): Remove decl; no longer needed.
    (isfinite): New macro, if not already supplied.
    (isnan): Don't replace any existing macro.
    (Ffrexp, Fldexp): Define even if !HAVE_COPYSIGN, as frexp and ldexp
    are present on all C89 platforms.
    (Ffrexp): Do not special-case zero, as frexp does the right thing
    for that case.
    (Flogb): Do not use logb, as it doesn't have the desired meaning
    on hosts that use non-base-2 floating point.  Instead, stick with
    frexp, which is C89 anyway.  Do not pass an infinity or a NaN to
    frexp, to avoid getting an unspecified result.
NEWS 83.9 KB