From 7084b617c436f0e5f4b5c1fc0c7753ae7bdc9afc Mon Sep 17 00:00:00 2001 From: Sam Tobin-Hochstadt Date: Fri, 7 May 2021 12:24:38 -0400 Subject: [PATCH] bc: repair (sqrt x-0.0i). Related to #3822. --- racket/src/bc/src/complex.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/racket/src/bc/src/complex.c b/racket/src/bc/src/complex.c index 045b105ce6..8adc2da483 100644 --- a/racket/src/bc/src/complex.c +++ b/racket/src/bc/src/complex.c @@ -339,7 +339,7 @@ Scheme_Object *scheme_complex_sqrt(const Scheme_Object *o) i = c->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); if (!SCHEME_COMPLEXP(r)) return scheme_make_complex(r, i); @@ -353,7 +353,12 @@ Scheme_Object *scheme_complex_sqrt(const Scheme_Object *o) else #endif 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 return r; }