No entiendo por qué todas las respuestas a esa pregunta son las mismas.
Hay varias formas de calcular la raíz cuadrada a partir de un número. Uno de ellos fue propuesto por Isaac Newton. Solo escribiré una de las implementaciones más simples de este método. Lo uso para mejorar la precisión de la raíz cuadrada doble.
// x - a number, from which we need to calculate the square root
// epsilon - an accuracy of calculation of the root from our number.
// The result of the calculations will differ from an actual value
// of the root on less than epslion.
public static decimal Sqrt(decimal x, decimal epsilon = 0.0M)
{
if (x < 0) throw new OverflowException("Cannot calculate square root from a negative number");
decimal current = (decimal)Math.Sqrt((double)x), previous;
do
{
previous = current;
if (previous == 0.0M) return 0;
current = (previous + x/previous)/2;
}
while (Math.Abs(previous - current) > epsilon);
return current;
}
Acerca de la velocidad: en el peor caso (epsilon = 0 y el número es decimal.MaxValue) el bucle se repite a menos de tres veces.
Si usted quiere saber más, lea this (Hacker's Delight by Henry S. Warren, Jr.)
Bueno, estoy haciendo una aplicación calcula la proporción áurea, que eventualmente irá al rango decimal. No funcionará en mi escenario. – Ave