finite?, infinite?, nan? - floating-point classification procedures

LIBRARY

(import (rnrs))                     ;R6RS
(import (rnrs base))                ;R6RS
(import (scheme inexact))           ;R7RS
(import (rnrs arithmetic flonums))  ;R6RS

SYNOPSIS

;; R6RS
(finite? x)
(infinite? x)
(nan? x)

(flfinite? fl)
(flinfinite? fl)
(flnan? fl)

;; R7RS
(finite? z)
(infinite? z)
(nan? z)

DESCRIPTION

These numerical predicates test a number object for a particular property, returning #t or #f.
finite?
Tests whether x is not an infinity and not a NaN.
infinite?
Tests whether x is an infinity.
nan?
Tests whether x is a NaN.

The R7RS variants are extended to support complex numbers (if the implementation supports complex numbers).

finite?
Tests whether the real and imaginary parts of z are finite.
infinite?
Tests whether the real or imaginary parts of z are infinite.
nan?
Tests whether the real or imaginary parts of z are NaN.

The flonum variants in R6RS are restricted to flonum arguments.

The results may be unreliable because a small inaccuracy may affect the result.

RETURN VALUES

These procedures return a single value; a boolean object.

EXAMPLES

(finite? +inf.0)       => #f
(finite? 5)            => #t
(finite? 5.0)          => #t
(infinite? 5.0)        => #f
(infinite? +inf.0)     => #t
(nan? 32)              => #f

;; R7RS examples
(finite? +inf.0)       => #f
(finite? 3.0+inf.0i)   => #f
(infinite? +inf.0)     => #t
(infinite? +nan.0)     => #f
(infinite? 3.0+inf.0i) => #t
(nan? +nan.0)          => #t
(nan? +nan.0+5.0i)     => #t
(nan? 1+2i)            => #f

APPLICATION USAGE

A common use for the nan? procedure is to replace NaNs with some another value, such as zero. It's not possible to check for NaNs with code like (= x +nan.0).

COMPATIBILITY

The variants in R6RS only support real numbers.

ERRORS

This procedure can raise exceptions with the following condition types:
&assertion (R6RS)
The wrong number of arguments was passed or an argument was outside its domain. In particular, the flonum variants require a flonum argument.
R7RS
The assertions described above are errors. Implementations may signal an error, extend the procedure's domain of definition to include such arguments, or fail catastrophically.

SEE ALSO

zero?(3scm)

STANDARDS

R6RS, R7RS

HISTORY

These procedures are new in R6RS and were later also added in R7RS with names that coincide with those in R6RS.

The C99 language and POSIX offer a more detailed classification which includes subnormals, see fpclassify(3).

AUTHORS

This page is part of the scheme-manpages project. It includes materials from the RnRS documents. More information can be found at https://github.com/schemedoc/manpages/.


Markup created by unroff 1.0sc,    March 04, 2023.