[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Scheme-reports] Numerical example (real? -2.5+0.0i)
| Date: Tue, 16 Aug 2011 14:25:11 -0400
| From: John Cowan <cowan@x>
| Aubrey Jaffer scripsit:
| > Algebraically, the complex numbers are the field of reals extended by
| > a solution of x^2+1=0. All reals are complex; there is no difference
| > between real 2.0 and 2.0+0.0i.
| I used the term "general complex number" in the same sense it is used
| in R5RS, to mean a number whose imaginary part is nonzero.
| > FreeSnell <http://people.csail.mit.edu/jaffer/FreeSnell> is a Scheme
| > application for computing the optical properties of thin-films. It
| > uses complex numbers intensively in its computations. The only
| > effects of distinguishing real real from complex real numbers would be
| > to increase its storage and reduce its performance.
| I don't understand this. How can either storage or performance depend
| on the result returned by the real? procedure?
In SCM, inexacts are created by the C procedure:
SCM makdbl(double x, double y).
If y is nonzero then 16.B are allocated and a tc_dblc is returned.
Otherwise only 8.B are allocated and a tc_dblr is returned.
( Actually, if x fits in a 32.bit float without loss of accuracy when
converting back to double, then a 32.bit float is put in the CDR of
the header cell and no malloc() is done. )
Making "complex reals" occupy 16.B would increase the storage used and
make every mathematical operation on them slower because complex
operations are more complicated than real ones.
I could play games with type bits, but with 6 internal numeric types
already (INUM, flo, dblr, dblc, bigpos, and bigneg), modifying all the
numeric dispatch code would require significant effort, all for a
distinction which I have neither wanted nor needed in years of heavy
| > So no, SCM won't be distinguishing "real reals" from "complex reals".
Scheme-reports mailing list