bc: repair (sqrt x-0.0i).

Related to #3822.
This commit is contained in:
Sam Tobin-Hochstadt 2021-05-07 12:24:38 -04:00 committed by Sam Tobin-Hochstadt
parent 4880bfe916
commit 7084b617c4

View File

@ -339,7 +339,7 @@ Scheme_Object *scheme_complex_sqrt(const Scheme_Object *o)
i = c->i; i = c->i;
if (scheme_is_zero(i)) { if (scheme_is_zero(i)) {
/* Special case for x+0.0i: */ /* Special case for x+0.0i and x-0.0i: */
r = scheme_sqrt(1, &r); r = scheme_sqrt(1, &r);
if (!SCHEME_COMPLEXP(r)) if (!SCHEME_COMPLEXP(r))
return scheme_make_complex(r, i); return scheme_make_complex(r, i);
@ -353,7 +353,12 @@ Scheme_Object *scheme_complex_sqrt(const Scheme_Object *o)
else else
#endif #endif
r = scheme_make_double(0.0); r = scheme_make_double(0.0);
return scheme_make_complex(r, c->i); if (scheme_minus_zero_p(scheme_real_to_double(i))) {
/* we started with x-0.0i */
return scheme_make_complex(r, scheme_bin_minus(scheme_make_integer(0), c->i));
}
else
return scheme_make_complex(r, c->i);
} else } else
return r; return r;
} }