chicken-users
[Top][All Lists]

## Re: [Chicken-users] rectnum? misdefined in numbers egg?

 From: Kon Lovett Subject: Re: [Chicken-users] rectnum? misdefined in numbers egg? Date: Tue, 25 Aug 2009 21:02:20 -0700

```
On Jun 25, 2009, at 12:27 PM, John Cowan wrote:

```
```Normally, a rectnum is understood to be a representation of a non-real
number as two boxes containing arbitrary real numbers, whereas a
compnum uses two unboxed flonums.  However, the numbers egg defines
rectnum? as returning #t if its argument is an exact non-real number.
Consequently, numbers like 1.0+1i are neither rectnums nor compnums.
```
```
Thanks for pointing this out. A real problem.

```
```I think rectnum? should be changed to recognize them as rectnums.
```
```
```
```
```
Here are portable implementations of bignum?, flonum?, ratnum?, compnum?,
```and rectnum?, given only R5RS and fixnum?:

(define (bignum? x) (and (integer? x) (not (fixnum? x))))

(define (flonum? x) (and (real? x) (inexact? x)))

(define (ratnum? x) (and (exact? x) (not (integer? x))))

(define (compnum? x) (and (not (real? x))
(let ((re (real-part x))
(im (imag-part x)))
(and (inexact? re) (inexact? im)))))

(define (rectnum? x) (and (not (real? x)) (not (compnum? x))))
```
```
So 1.1+1i is a rectnum?

See numbers-1.808 where:

(define (compnum? x) (and (not (real? x)) (inexact? x)))

(define (rectnum? x) (and (not (real? x))
(let ((re (real-part x)) (im (imag-part x)))
(and (or (exact? re) (integer? re))
(or (exact? im) (integer? im))))))

Also added (cplxnum? X) and (cintnum? X) procs.

```
```

--
The Unicode Standard does not encode            John Cowan
idiosyncratic, personal, novel, or private      http://www.ccil.org/~cowan
use characters, nor does it encode logos

_______________________________________________
Chicken-users mailing list
http://lists.nongnu.org/mailman/listinfo/chicken-users
```
```

Note that Chicken converts FP|FX x 0.0/0 -> FP|FX:

(flonum? 3.4+0.0i) ;=> #t
(fixnum? 3+0i) ;=> #t

```
If a complex number form is read (or programmatically generated, i.e. 'make-polar' & 'make-rectangular') should the programmer expect the result to be a complex number representation?
```
I guess this is similar to other read/print issues.

Best Wishes,
Kon

```