From c75779b1a153b249255f3f646442d93df0ef2dbb Mon Sep 17 00:00:00 2001 From: Spencer Florence Date: Sun, 9 Jul 2017 13:04:19 -0500 Subject: [PATCH] attempt to fix float-complex --- .../typed-racket/optimizer/float-complex.rkt | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/typed-racket-lib/typed-racket/optimizer/float-complex.rkt b/typed-racket-lib/typed-racket/optimizer/float-complex.rkt index 529aa655..88f9835c 100644 --- a/typed-racket-lib/typed-racket/optimizer/float-complex.rkt +++ b/typed-racket-lib/typed-racket/optimizer/float-complex.rkt @@ -570,11 +570,18 @@ #`(let*-values (c.bindings ...) ;; reuses the algorithm used by the Racket runtime (let*-values ([(r) (unsafe-flabs c.real-binding)] - [(i) (unsafe-flabs c.imag-binding)] - [(q) (unsafe-fl/ r i)]) - (unsafe-fl* i - (unsafe-flsqrt (unsafe-fl+ 1.0 - (unsafe-fl* q q))))))]))) + [(i) (unsafe-flabs c.imag-binding)]) + (if (zero? i) + r + (if (unsafe-fl< i r) + (let-values ([(q) (unsafe-fl/ i r)]) + (unsafe-fl* r + (unsafe-flsqrt (unsafe-fl+ 1.0 + (unsafe-fl* q q))))) + (let-values ([(q) (unsafe-fl/ r i)]) + (unsafe-fl* i + (unsafe-flsqrt (unsafe-fl+ 1.0 + (unsafe-fl* q q)))))))))]))) (pattern (#%plain-app op:float-complex-op e:expr ...)