summaryrefslogtreecommitdiff
path: root/libk/src/math/sqrt.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--libk/src/math/sqrt.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/libk/src/math/sqrt.c b/libk/src/math/sqrt.c
new file mode 100644
index 0000000..b875079
--- /dev/null
+++ b/libk/src/math/sqrt.c
@@ -0,0 +1,36 @@
+#include <math.h>
+
+float sqrtf(float num) {
+ if (num < 0)
+ return NAN;
+
+ if (num < 2)
+ return num;
+
+ float y = num;
+ float z = (y + (num / y)) / 2;
+
+ while (fabsf(y - z) >= 0.00001) {
+ y = z;
+ z = (y + (num / y)) / 2;
+ }
+ return z;
+}
+
+double sqrt(double num) {
+ if (num < 0)
+ return NAN;
+
+ if (num < 2)
+ return num;
+
+ double y = num;
+ double z = (y + (num / y)) / 2;
+
+ while (fabs(y - z) >= 0.00001) {
+ y = z;
+ z = (y + (num / y)) / 2;
+ }
+ return z;
+}
+