Cálculo de raíz cuadrada dígito a dígito
En este artículo veremos el algoritmo de cálculo dígito a dígito para la resolución de raíces cuadradas y su implementación en diferentes lenguajes de programación
El método de cálculo de raíces dígito a dígito es un procedimiento que permite obtener la raíz cuadrada de cualquier número. Este es un algoritmo iterativo en el que obtiene un dígito del resultado en cada iteración. Es aplicable tanto en raíces enteras como números irracionales.
Resolución para número entero
Resolución para número irracional
Raíces de resolución entera: pasos de cálculo
Paso 1:
- Colocar el radicando en la columna de la izquierda
- Separar el radicando en grupos de dos dígitos comenzando por la derecha
En este ejemplo se intenta calcular la raíz cuadrada de 25921
.
Al tener un número impar de dígitos el primer dígito quedará solo en el grupo.
Paso 2:
- Bajar el primer grupo de dígitos al resto
- Se debe buscar un dígito d tal que el valor del número auxiliar (inicialmente con un valor 0) concatenado con d y multiplicado por d de como resultado el mayor valor menor o igual al resto. AUXd*d <= resto
- Agregar d al valor de la raíz
- Restar el resultado de la multiplicación AUXd*d al resto
Se baja el primer dígito 2
Se encuentra el dígito realizando la multiplicación con el número auxiliar que en este momento vale 0
:
0x0 = 0
1×1 = 1
2×2 = 4
Ya que el dígito que produce el mayor valor sin pasar el valor 2
del resto se lo selecciona y se coloca como primer dígito de la raíz
Se resta el resultado de la multiplicación al resto dando como resultado 1
Paso 3
- Se obtiene el nuevo valor auxiliar multiplicando por 2 el valor actual de la raíz
El nuevo valor auxiliar es 2
ya que se multiplica por 2
el valor actual de la raíz que es uno
Paso 5
- Bajar el siguiente par de dígitos al resto
- Repetir los pasos hasta lograr un resto 0
El nuevo valor del resto al haber bajado los dígitos 5
y 9 es 159
.
Se debe buscar el siguiente dígito de manera que el resultado de la multiplicación no sea mayor a 159
.
Ya que el valor auxiliar es 2
las multiplicaciones serán del tipo:
20 x 0 = 0
21 x 1 = 1
22 x 2 = 44
23 x 3 = 69
24 x 4 = 96
25 x 5 = 125
26 x 6 = 156
27 x 7 = 189
El dígito seleccionado es 6
y es agregado a la raíz.
El resultado de la multiplicación 156
es restado al resto dando como resultado 3
El nuevo valor auxiliar se calcula multiplicando el valor de la raíz 16
por 2
dando por resultado 32
.
Se bajan los siguientes dos dígitos, 2
y 1
, siendo el nuevo resto 321
.
Se busca el nuevo dígito a partir del auxiliar 32
:
320 x 0 = 0
321 x 1 = 321
La multiplicación da como resultado el valor del resto por lo que se selecciona y se agrega al valor de la raíz
Se resta el resultado al resto dando por resultado 0
Como no hay más dígitos para bajar y el resto es 0
se finaliza el cálculo siendo el valor de la raíz 161
.
Código Python
from math import ceil
# Convertir radicando a cadena de caracteres
radicando = str(25921)
raiz_aprox = '0'
resto = ''
auxiliar = ''
#Obtener pares de numeros del radicando
if len(radicando) % 2 == 0:
pares = [radicando[i:i+2] for i in range(0, len(radicando), 2)]
else:
pares = [radicando[0]] + [radicando[i:i+2] for i in range(1, len(radicando), 2)]
for par in pares:
#Agregar par de números al resto
resto += par
#Buscar el siguiente dígito de la raíz
digito = 0
for i in range(1,10):
if int(auxiliar+str(i))*i <= int(resto):
digito = i
else:
break
#Agregar digito a la raiz
raiz_aprox+=str(digito)
#Restar resultado al resto
resto = str(int(resto) - (int(auxiliar+str(digito))*int(digito)))
#Obtener nuevo auxiliar
auxiliar = str(int(raiz_aprox)*2)
print("Raiz: %d" % int(raiz_aprox))
Código PHP
<?php
// Colocar radicando como cadena de caracteres
$radicando = '25921';
$raiz_aprox = '0';
$resto = '';
$auxiliar = '';
// Obtener pares de números del radicando
if (strlen($radicando) % 2 == 0) {
$pares = str_split($radicando, 2);
} else {
$pares = array_merge(array($radicando[0]), str_split(substr($radicando, 1), 2));
}
foreach ($pares as $par) {
// Agregar par de números al resto
$resto .= $par;
// Buscar el siguiente dígito de la raíz
$digito = 0;
for ($i = 1; $i < 10; $i++) {
if ((int)($auxiliar . $i) * $i <= (int)$resto) {
$digito = $i;
} else {
break;
}
}
// Agregar digito a la raiz
$raiz_aprox .= (string)$digito;
// Restar resultado al resto
$resto = (string)((int)$resto - ((int)($auxiliar . $digito) * $digito));
// Obtener nuevo auxiliar
$auxiliar = (string)((int)$raiz_aprox * 2);
}
echo "Raiz: " . (int)$raiz_aprox;
?>
Raíces de resolución con decimales: pasos de cálculo
En este ejemplo se resolverá la raíz cuadrada de 120
Se comienza separando los dígitos en grupos de 2
Se baja el primer dígito 1
convirtiéndose en el resto
Se busca el valor del primer dígito a partir del número auxiliar que es 0
1×0 = 0
1×1 = 1
2×2 = 4
Se selecciona el valor 1
y se agrega al valor de la raíz
Se le resta el resultado de la multiplicación al resto dando como resultado 0
Se obtiene el nuevo número auxiliar multiplicando el valor actual de la raíz por 2
Se bajan los siguientes dos dígitos agregándolos al resto cuyo nuevo valor es 20
Se busca el siguiente valor para el número auxiliar 2
20×0 = 0
21×1 = 21
El valor del nuevo dígito es 0
y es agregado a la raíz
Se resta el valor al resto quedando en 20
Ya que el resultado no es un número entero no quedan más dígitos para bajar pero el resto es mayor a 0
.
Se obtiene el nuevo número auxiliar multiplicando el valor de la raíz por 2
dando como resultado 20
Para continuar con el cálculo se colocan dos 0
al resto
Ya que se han agregado 0
al resto se colocará una coma a la raíz y los nuevos dígitos encontrados se colocaran a continuación.
Se busca el siguiente dígito multiplicando el número auxiliar
207×7 = 1449
208×8 = 1664
209×9 = 1881
Se selecciona el dígito 9
y se agrega al resultado de la raíz
El resultado de la multiplicación se resta al resto dando como resultado 119
Se finaliza el proceso cuando se llega a la cantidad de decimales requeridos
El proceso puede repetirse tantas veces como se requiera para obtener más valores decimales. Cada vez que se quiere obtener un nuevo dígito dos 0 deben agregarse al resto. En el caso que el resultado sea un número irracional el proceso podrá continuarse indefinidamente.
Código Python
from math import ceil
# Convertir radicando a cadena de caracteres
radicando = str(120)
raiz_aprox = '0'
resto = ''
auxiliar = ''
cant_decimales = 3
#Obtener pares de numeros del radicando
if len(radicando) % 2 == 0:
pares = [radicando[i:i+2] for i in range(0, len(radicando), 2)]
else:
pares = [radicando[0]] + [radicando[i:i+2] for i in range(1, len(radicando), 2)]
# Agregar punto decimal
pares.append(".")
# Agregar tantos pares de ceros como decimales deseados
for i in range(cant_decimales):
pares.append("00")
for par in pares:
print(par)
if par == ".":
raiz_aprox+=par
else:
#Agregar par de números al resto
resto += par
#Buscar el siguiente dígito de la raíz
digito = 0
for i in range(1,10):
if int(auxiliar+str(i))*i <= int(resto):
digito = i
else:
break
#Agregar digito a la raiz
raiz_aprox+=str(digito)
#Restar resultado al resto
resto = str(int(resto) - (int(auxiliar+str(digito))*int(digito)))
#Obtener nuevo auxiliar
auxiliar = str(int(raiz_aprox.replace('.', ''))*2)
print("Raiz: %f.cant_decimales" % float(raiz_aprox))
Código PHP
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
// Convertir radicando a cadena de caracteres
$radicando = '120';
$raiz_aprox = '0';
$resto = '';
$auxiliar = '';
$cant_decimales = 3;
// Obtener pares de números del radicando
if (strlen($radicando) % 2 == 0) {
$pares = str_split($radicando, 2);
} else {
$pares = array_merge(array($radicando[0]), str_split(substr($radicando, 1), 2));
}
# Agregar coma
array_push($pares,".");
# Agregar tantos pares de ceros como decimales deseados
for ($i = 1; $i <= $cant_decimales; $i++) {
array_push($pares,"00");
}
foreach ($pares as $par) {
if ($par == "."){
$raiz_aprox.=$par;
}else{
// Agregar par de números al resto
$resto .= $par;
// Buscar el siguiente dígito de la raíz
$digito = 0;
for ($i = 1; $i < 10; $i++) {
if ((int)($auxiliar . $i) * $i <= (int)$resto) {
$digito = $i;
} else {
break;
}
}
// Agregar digito a la raiz
$raiz_aprox .= (string)$digito;
// Restar resultado al resto
$resto = (string)((int)$resto - ((int)($auxiliar . $digito) * $digito));
// Obtener nuevo auxiliar
$auxiliar = (string)((int)str_replace('.', '', $raiz_aprox) * 2);
}
}
echo "Raiz: " . (float)$raiz_aprox;
?>
En este artículo hemos visto el funcionamiento del algoritmo dígito a dígito para la búsqueda de raíces cuadradas. También hemos visto la implementación de este algoritmo en varios lenguajes de programación.