Adjust the value of `+most-negative-normalized-float-exponent+` for
clisp (and other lisps where `$least_positive_float` and
`$least_positive_normalized_float` are the same).
Update tests to use `$least_positive_float` as the result instead of
using an explicit numerical value that is wrong when Lisp doesn't
support denormals.
With these changes, clisp passes all the tests except the one
involving `unit_in_last_place(float((0+2^52)/2^1073))` because that
assumes denormals are supported.
Different Lisps return different values for `integer-decode-float` of
a denormal. These different values are valid return values because
they can be used with `scale-float` to get exactly the same number
back (modulo sign).
Instead, use `decode-float` which doesn't have such leeway in possible
values. There's only one way to represent a float with a mantissa in
the range [0.5, 1) with a given exponent.
Thus, use `decode-float` to compute the ULP.
This requires changing the constant `+most-negative-float-exponent+`
to `+most-negative-normalized-float-exponent+`.
(Note: note yet checked with clisp which has only normalized floats.)
First, add `in-package` to make this part of maxima.
Second, use `+least-positive-flonum+` to determine the most negative
float exponent. (And due to a bug in cmucl's compiler, it can't
compute this correctly, so just hard-wire a value of -1126.)
Add the file ulp.lisp from Stavros, as is. Update maxima.system and
maxima.asd to add this file to the numerical-functions module. (For
no particular reason.)