LEAST-POSITIVE-DOUBLE-FLOAT is same as LEAST-POSITIVE-NORMALIZED-DOUBLE-FLOAT even though denormalized floats are allowed
I don't know if ECL allows denormalized floats on all platforms, but at least on my platform (Linux x86), the constant LEAST-POSITIVE-DOUBLE-FLOAT is same as LEAST-POSITIVE-NORMALIZED-DOUBLE-FLOAT even though denormalized floats are allowed. Therefore there exist positive double floats which are less than LEAST-POSITIVE-DOUBLE-FLOAT, which seems unexpected to me.
> least-positive-normalized-double-float 2.2250738585072014d-308 > least-positive-double-float 2.2250738585072014d-308 > (/ least-positive-double-float 2) 1.1125369292536007d-308
CLHS says: "Of these variables, each which has '-normalized' in its name must have a value which is a normalized float, and each which does not have '-normalized' in its name may have a value which is either a normalized float or a denormalized float, as appropriate."
That's not entirely clear, given that "appropriate" is not defined. But I am guessing it is intended that the non-normalized values should be denormalized values if they exist in the implementation.
For the record, SBCL, CMUCL, and GCL all distinguish LEAST-POSITIVE-DOUBLE-FLOAT and LEAST-POSITIVE-NORMALIZED-DOUBLE-FLOAT (and LEAST-POSITIVE-DOUBLE-FLOAT is a denormalized value).
I didn't check other float types other than double float.
I am working with ECL 16.1.3 but browsing the current source code from Gitlab seems to show that the same values are defined for LEAST-POSITIVE-DOUBLE-FLOAT and LEAST-POSITIVE-NORMALIZED-DOUBLE-FLOAT, so I guess the status is unchanged since 16.1.3.
> (lisp-implementation-version) "16.1.3" > (software-type) "Linux" > (software-version) "3.13.0-44-generic" > (machine-type) "i686" > *features* (:QUICKLISP :ASDF-PACKAGE-SYSTEM :ASDF3.1 :ASDF3 :ASDF2 :ASDF :OS-UNIX :NON-BASE-CHARS-EXIST-P :ASDF-UNICODE :ECL-BYTECMP :WALKER :CDR-1 :CDR-5 :LINUX :FORMATTER :CDR-7 :ECL-WEAK-HASH :LITTLE-ENDIAN :ECL-READ-WRITE-LOCK :LONG-LONG :UINT64-T :UINT32-T :UINT16-T :RELATIVE-PACKAGE-NAMES :LONG-FLOAT :UNICODE :DFFI :CLOS-STREAMS :CMU-FORMAT :UNIX :ECL-PDE :DLOPEN :CLOS :THREADS :BOEHM-GC :ANSI-CL :COMMON-LISP :IEEE-FLOATING-POINT :CDR-14 :PREFIXED-API :FFI :I686 :COMMON :ECL) > (ext:lisp-implementation-vcs-id)` "UNKNOWN"
uname -a reports:
Linux freekbox 3.13.0-44-generic #73-Ubuntu SMP Tue Dec 16 00:23:46 UTC 2014 i686 i686 i686 GNU/Linux