This is a small program I’ve come up with, with the intention of finding the root of a perfect square. I wanted some comments on the performance impact, as well as the use of resources.
square_root.c
#include "square_root.h"
static uint64_t power(uint8_t base, uint8_t exp) {
uint64_t result = 1;
while (exp--) {
result *= base;
}
return result;
}
static uint64_t seed(uint64_t radicand) {
uint64_t a = radicand;
uint64_t n = 0;
while (radicand /= 100) {
a = radicand;
++n;
}
return ((a < 10)
? ((0.28 * a) + 0.89)
: ((0.089 * a) + 2.8)) * power(10, n);
}
static uint64_t heron(uint64_t x, uint64_t s) {
while (s != power(x, 2)) {
x = (x + (s / x)) / 2;
}
return x;
}
uint16_t square_root(uint64_t radicand) {
return heron(seed(radicand), radicand);
}
square_root.h
#ifndef SQUARE_ROOT_H
#define SQUARE_ROOT_H
#include <stdbool.h>
#include <stdint.h>
#include <stddef.h>
uint16_t square_root(uint64_t radicand);
#endif
You must log in or register to comment.