New NaN-related and min/max flonum procedures and fixes.
authorTaylor R Campbell <campbell@mumble.net>
Wed, 28 Nov 2018 19:24:36 +0000 (19:24 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Fri, 30 Nov 2018 06:53:14 +0000 (06:53 +0000)
commitd48b47109db26932582042d057d694c7393955fe
tree0932035728b4d0592ac8de8d192dab9ea5a6304b
parentda7702961c41023905a8195a6750d9fc1eab2668
New NaN-related and min/max flonum procedures and fixes.

- (flo:qnan) returns a quiet NaN: arithmetic on it quietly returns
  another qNaN (usually the same one, unless there are multiple to
  choose from) without raising any exception.

- (flo:snan) returns a signalling NaN: arithmetic on it returns
  another sNaN (usually the same) and raises an exception, which will
  trap if you ask.

- (flo:qnan? f) = (and (flo:nan? f) (flo:nan-quiet? f))

- (flo:snan? f) = (and (flo:nan? f) (not (flo:nan-quiet? f)))

- (flo:min x y) and (flo:max x y) now raise an exception only if at
  least one input is a signalling NaN, and traps only if you ask.
  These now implement minNum and maxNum of IEEE 754-2008.

- (flo:min-mag x y) and (flo:max-mag x y) return whichever of the
  inputs has the smaller magnitude, as in minNumMag and maxNumMag in
  IEEE 754-2008.
src/runtime/primitive-arithmetic.scm
src/runtime/runtime.pkg
tests/microcode/test-flonum-except.scm
tests/runtime/test-flonum.scm