Is the number Z+inf.0 or -inf.0, or a complex number containing either infinity as its real or imaginary part?

Note: This is not the inverse of finite?, since it produces #f on nan.0 (or complex numbers containing nan.0), while finite? also returns #f in that case.

[procedure](nan? Z)

Is the object Z a real representing nan.0?

[procedure](exact-integer-sqrt K)

Returns two values s and r, where s^2 + r = K and K < (s+1)^2. In other words, s is the closest square root we can find that's equal to or smaller than K, and r is the rest if K isn't a neat square of two numbers.

[procedure](exact-integer? X)

Is X an exact integer?

[procedure](quotient&remainder A B)

Return the quotient and the remainder of A divided by B.

This is especially useful for bignums, since both numbers are derived simultaneously. This saves performing the division algorithm twice.

[procedure](quotient&modulo A B)

Like quotient&remainder, except return the modulo instead of remainder.

[procedure](conj Z)

Returns the conjugate of the complex number Z.

[procedure](bignum? X)

Is X an extended-precision integer?

[procedure](ratnum? X)

Is X a ratio?

[procedure](cplxnum? X)

Is X a complex?

[procedure](rectnum? X)

Is X an exact-complex? (Treats an integer-floatingpoint as "exact".)

[procedure](compnum? X)

Is X an inexact-complex?

[procedure](cflonum? X)

Is X a floatingpoint-complex or a floatingpoint?

[procedure](cintnum? X)

Is X an integer-complex or an integer?

[procedure](integer-length X)

From SRFI-60; get the number of bits required to represent the integer X in 2s complement notation.

Compiled code

Starting with version 2.8, extended number literals can be used in compiled code. To make this work, compile your code with:

csc -X numbers-syntax foo.scm

IMPORTANT: This only works when the code will be run on exactly the same platform as the Scheme compiler ran on. Cross-compilation and compiling to C and compiling that on the target platform is not supported. (You will get an error message when you try to do it anyway)

Bugs and limitations

Extended number literals can not be used portably in compiled code (use string->number for maximum portability).

For best results, use Chicken 4.7.4 or later. Extended numbers syntax isn't reliably supported by the reader of earlier Chicken versions (here as well, use string->number for maximum portability).

About this egg

Author

The code for complex arithmetic was mostly taken from Thomas Chust's complex egg.

Maintainer

The CHICKEN Team

Version history

trunk

Correct handling of exactness prefix (requires recent Chicken to work, at least 4.7.4). Division by inexact zero is no longer considered an error, but returns NaN or +Inf/-Inf. inexact->exact raises an error on NaN instead of returning 0 (reported by Felix Winkelmann). Fix log so it doesn't erroneously fail on complex numbers. Generalize asin and acos so they can return complex numbers. Fix <= and >= so they work when given a nan argument in rest position. Various fixes for code that expected inexact numbers so it calls exact->inexact before. Add types database for scrutinizer (Only in Chicken 4.7.4 and later).

2.7

Fix several bugs (expt, integer?, rational?, <=, >=, eqv?, -) found by importing the number tests from Gauche and writing an extensive test for number syntax edge cases. Complete rewrite of number parser (it should fully conform to the R7RS superset of R5RS number syntax now). Dropped dependency on the regex egg. Improved precision of exact->inexact so it can handle more extreme numbers. Provide the nan?, finite? and infinite? predicates and integer-length procedure.

2.6.1

Fix string->number so it raises an exception instead of crashing when passed a negative, zero or too large base (reported by Peter Hendrickson). Update test scripts so they exit with nonzero status in case of failed tests (reported by Mario Goulart)

2.6

Fix expt and log so they work for numbers which produce complex results.

2.5

Fix expt so it doesn't use flonums and loses precision in case of bignums

2.4

Added regex to dependency list

2.3

Added regex requirement to make it work in Chicken 4.6.2+

2.2

Fixed ratnum normalization in case of negative divisors

2.1

Changed quotient, remainder and quotient&remainder semantics so they accept fractional flonums to match Chicken's implementation of quotient and remainder. This also affects modulo and quotient&modulo.

2.0

Removed dependency on GMP, replacing it by the Scheme48 numbers code. Improved performance by integrating with GC. Added benchmarks and more tests. Converted testsuite to use the test egg instead of testeez. [by Peter Bex]

bignum/fixnum subtraction used wrong argument order [Thanks to Kon Lovett]

0.96

Several bug fixes by Alex Shinn; signum is exactness preserving

0.95

Alex Shinn contributed a working version of expt

0.94

Yet another bug-fix by Michal

0.93

Several bug-fixes by Michal Janeczek

0.92

exactness handling of expt is slightly better but still not perfect.

0.91

Fixed bug in integer?

0.9

(beta)

License

Copyright (c) 2008-2012 The CHICKEN Team
Copyright (c) 2000-2007, Felix L. Winkelmann
Copyright (c) 1993-2008 Richard Kelsey and Jonathan Rees
Copyright 1986,1987,1988,1989,1990,1991 Massachusetts Institute of Technology
Copyright 1992,1993,1994,2004 Massachusetts Institute of Technology
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of the authors may not be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.