mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-17 01:00:20 +02:00
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.
This commit is contained in:
parent
cff5fa3384
commit
7112615f73
5 changed files with 89 additions and 13 deletions
|
@ -1,6 +1,6 @@
|
|||
;;; base.scm --- The R6RS base library
|
||||
|
||||
;; Copyright (C) 2010 Free Software Foundation, Inc.
|
||||
;; Copyright (C) 2010, 2011 Free Software Foundation, Inc.
|
||||
;;
|
||||
;; This library is free software; you can redistribute it and/or
|
||||
;; modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -76,6 +76,7 @@
|
|||
(import (rename (except (guile) error raise)
|
||||
(quotient div)
|
||||
(modulo mod)
|
||||
(inf? infinite?)
|
||||
(exact->inexact inexact)
|
||||
(inexact->exact exact))
|
||||
(srfi srfi-11))
|
||||
|
@ -98,9 +99,6 @@
|
|||
(let ((sym (car syms)))
|
||||
(and (symbol? sym) (symbol=?-internal (cdr syms) sym)))))
|
||||
|
||||
(define (infinite? x) (or (eqv? x +inf.0) (eqv? x -inf.0)))
|
||||
(define (finite? x) (not (infinite? x)))
|
||||
|
||||
(define (exact-integer-sqrt x)
|
||||
(let* ((s (exact (floor (sqrt x)))) (e (- x (* s s)))) (values s e)))
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue