Implement `finite?' in core and fix R6RS `finite?' and `infinite?'
authorMark H Weaver <mhw@netris.org>
Wed, 26 Jan 2011 14:34:02 +0000 (09:34 -0500)
committerAndy Wingo <wingo@pobox.com>
Fri, 28 Jan 2011 11:21:14 +0000 (12:21 +0100)
commit7112615f73bf79197832fd044dc7f7d9d94b5325
treea3018e7ef176829db77b1ee2988160609d9a58e9
parentcff5fa3384a097839e4a7ae74307d55bab58e2ba
Implement `finite?' in core and fix R6RS `finite?' and `infinite?'

* libguile/numbers.c (scm_finite_p): Add new predicate `finite?' from
  R6RS to guile core, which returns #t if and only if its argument is
  neither infinite nor a NaN.  Note that this is not the same as (not
  (inf? x)) or (not (infinite? x)), since NaNs are neither finite nor
  infinite.

* test-suite/tests/numbers.test: Add test cases for `finite?'.

* module/rnrs/base.scm: Import `inf?' as `infinite?' instead of
  reimplementing it.  Previously, the R6RS implementation of
  `infinite?' did not detect non-real complex infinities, nor did it
  throw exceptions for non-numbers.  (Note that NaNs _are_ considered
  numbers by scheme, despite their name).

  Import `finite?' instead of reimplementing it.  Previously, the R6RS
  implementation of `finite?' returned #t for both NaNs and non-real
  complex infinities, in violation of R6RS.

* NEWS: Add NEWS entries, and reorganize existing numerics-related
  entries together under one subheading.

* doc/ref/api-data.texi (Real and Rational Numbers): Add docs for
  `finite?' and scm_finite_p.
NEWS
doc/ref/api-data.texi
libguile/numbers.c
module/rnrs/base.scm
test-suite/tests/numbers.test