Корень куба с использованием итераций и деления пополам - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь найти кубический корень числа, разделив его пополам, а затем сузив.У меня есть программа для квадратного корня таким образом, но метод кубического корня просто продолжает цикл и никогда не дает ответа.Я не уверен, где я ошибся, и мне нужен совет.

public class myFunc
{
    public static double squareRoot(double value, double precision)
    {
        double low, high, middle;
        high = 1;
        low = value;
        middle = (high + low) / 2;
        Console.WriteLine("{0,20:n12}{1,20:n12}{2,20:n12}", low, middle, high);
        while ((high-low)>precision)
        {
            if ((middle * middle) <value)
            {
                low = middle;
            }
            else
            {
                high = middle;
            }
            middle = (high + low) / 2;
            Console.WriteLine("{0,20:n12}{1,20:n12}{2,20:n12}", low, middle, high);
        }
        return (middle);
    }

    public static double cubeRoot(double value, double precision)
    {
        double low, high, middle;

        high = value;
        low = 1;
        middle = (high + low) / 3;
        Console.WriteLine("{0,20:n12} {1,20:n12} {2,20:n12}", low, middle, high);
        while ((high - low) > precision)
        {
            if ((middle * middle*middle)>value)
            {

                high = middle;
            }

            else
            {
                low = middle;
            }
            middle = (high + low) / 3;
            Console.WriteLine("{0,20:n12} {1,20:n12} {2,20:n12}", low, middle, high);
        }
        return (middle);
    }

1 Ответ

0 голосов
/ 06 мая 2019

middle = (high + low) / 3; скажем, максимум - 10, минимум - 8, середина - ... 6?Разве это не за пределами желаемого диапазона?

Середина все еще должна быть (high + low) / 2, что делает этот поиск третьего корня просто тестом (middle * middle*middle)>value.

...