Las tablas de búsqueda se han mencionado en los comentarios. Hay dos enfoques.
Rápido
Cree una tabla de 256 bytes de longitud, con cada valor siguiente la raíz cuadrada del índice correspondiente. Esto es rápido ya que utiliza el argumento como índice para acceder directamente al valor correcto. El inconveniente es que necesita una tabla larga, con muchos valores duplicados.
Compacto
Como se dijo, un número entero de 8 bits solo puede tener valores de 0 a 255, y las raíces cuadradas correspondientes son de 0 a 16 (redondeadas). Construya una tabla de 16 entradas (basada en cero) con la entrada n-ésima el valor máximo para el argumento para el cual la raíz cuadrada es n. La tabla se vería así:
0
2
6
12
20
etc.
Camina por la mesa y se detiene cuando encuentra un valor mayor o igual a su argumento. Ejemplo: raíz cuadrada de 18
set index to 0
value[0] = 0, is less than 18, go to the next entry
value[1] = 2, is less than 18, go to the next entry
value[2] = 6, is less than 18, go to the next entry
value[3] = 12, is less than 18, go to the next entry
value[4] = 20, is greater than or equal to 18, so sqrt(18) = 4
Si bien la tabla de búsqueda rápida tiene un tiempo de ejecución fijo (solo una búsqueda), aquí el tiempo de ejecución es más largo para argumentos de mayor valor.
Para ambos métodos, al elegir diferentes valores para la tabla, puede seleccionar entre un valor redondeado o truncado para la raíz cuadrada.