Complex normalization takes exactness into account.

This commit is contained in:
Alex Shinn 2011-11-27 21:37:35 +09:00
parent 3675f3a5ea
commit a1057fa88e

6
sexp.c
View file

@ -1855,8 +1855,10 @@ sexp sexp_make_complex (sexp ctx, sexp real, sexp image) {
sexp sexp_complex_normalize (sexp cpx) { sexp sexp_complex_normalize (sexp cpx) {
return sexp_complexp(cpx) return sexp_complexp(cpx)
&& (sexp_complex_imag(cpx) == SEXP_ZERO && (sexp_complex_imag(cpx) == SEXP_ZERO
|| (sexp_flonump(sexp_complex_imag(cpx)) /* Only normalize for an exact zero imaginary part. */
&& sexp_flonum_value(sexp_complex_imag(cpx)) == 0.0)) /* || (sexp_flonump(sexp_complex_imag(cpx)) */
/* && sexp_flonum_value(sexp_complex_imag(cpx)) == 0.0) */
)
? sexp_complex_real(cpx) : cpx; ? sexp_complex_real(cpx) : cpx;
} }