Посчитать квадратный корень из числа без использования Math - C#
Формулировка задачи:
Привет всем...
Я в общем студент... И на первом занятии нам учитель задал задачку... она адресовалась к тем, кто уже знает си шарп.. я к таким не пренадлежал... но задачку запомнил.. и частенько ломаю себе голову...
Короч, тема такая....
Нужно добыть квадратный корень с числа..
Но при этом Math - библиотеку вообще не использовать...
Всё нужно сделать циклами, условиями плюсами минусами и прочим...
У кого какие мыслишки будут по этому поводу?
Решение задачи: «Посчитать квадратный корень из числа без использования Math»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Task1.Root
{
public static class Mathematics //(Including a root of negative numbers)
{
//With using recursion (alg. Newton). Every step we have lowering the power.
public static double Root(double number, int rank = 2, double precision = 0.001)
{
int sign = GetSign(ref number, rank);
double previousX = 1;
double presentX;
double tempPrecision = precision;
if (rank == 1)
return number*sign;
do
{
presentX = ((rank - 1) * previousX + number / Root(previousX, rank - 1, precision)) / rank;
tempPrecision = presentX - previousX;
previousX = presentX;
} while (Math.Abs(tempPrecision) > precision); // только тут вместо модуля бахните проверку на то, что больше.
// А то самого ломает)) Можно так же вместо заданной точности брать до
// double.Epsilon т.е. будет идентично... если стек не переполнится...))
return Root(presentX, rank - 1, precision) * sign;
}
/// <summary>
/// Find out the sign of number and changers negative to positive
/// </summary>
/// <param name="num">number</param>
/// <param name="rank">power of radical</param>
/// <returns>sign</returns>
private static int GetSign(ref double num, int rank)
{
if (num < 0 && rank % 2 == 1)
{
num *= -1;
return -1;
}
else
return 1;
}
}
}