| Date: Tue, 16 Aug 2011 14:25:11 -0400 | From: John Cowan <[email protected]> | | 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 complex-number crunching. | > So no, SCM won't be distinguishing "real reals" from "complex reals". _______________________________________________ Scheme-reports mailing list [email protected] http://lists.scheme-reports.org/cgi-bin/mailman/listinfo/scheme-reports
