From 6e8348fca6a5792a1d850fd5a9679ebf92f591a6 Mon Sep 17 00:00:00 2001 From: Kat Richey Date: Fri, 28 Oct 2022 00:05:56 -0500 Subject: [PATCH] Removed a circular dependency for pow --- math/sqrt.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/math/sqrt.c b/math/sqrt.c index 9d2b077..83277e5 100644 --- a/math/sqrt.c +++ b/math/sqrt.c @@ -9,10 +9,28 @@ typedef union { } parts; } _dbl_cast; +double _iexp2(int x) { + double result = 1.0; + if(x > 0) { + for(int i = 0; i < x; i++) { + result *= 2; + } + } + else if(x < 0) { + for(int i = 0; i > x; i--) { + result /= 2; + } + } + return result; +} + +/* + First gets an initial estimate then refines it using the Bakhshali method +*/ double sqrt(double x) { _dbl_cast S = { .d = x }; double estimate = (0.5 + 0.5 * S.parts.mantissa) * - exp2(S.parts.exponent - 1023); + _iexp2(S.parts.exponent - 1023); double a_n, b_n;