Я не понимаю, почему все ответы на этот вопрос одинаковы.
Есть несколько способов вычислить квадратный корень из числа. Один из них был предложен Исааком Ньютоном. Я напишу только одну из самых простых реализаций этого метода. Я использую его для повышения точности двойного квадратного корня.
// 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;
}
О скорости: в худшем случае (epsilon = 0 и число десятичное. MaxValue) цикл повторяется менее трех раз.
Если вы хотите узнать больше, прочитайте это ( Восторг Хакера Генри Уоррена, младшего)