NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Ondřej Krsička:14.4.2015 20:47

Ahoj, podle zdejšího návodu jsem si vytvořil metodu pro výpočet libovolné odmocniny. Můj problém je ten, že výpočet někdy funguje a jindy se zasekne. Nevím čím to je a tímto vás žádám o radu, kde mám chybu a případně o opravu :-) Přikládám kód.

public static double Odmocni(double a, double b)
{
    double v, x, y;
    v = a + 1;
    x = v / b;
    y = a / x;
    v = x + y;
    while (Math.Pow(x, b) != a)
    {
        x = v / b;
        y = a / x;
        v = x + y;

    }
    { return x; }
}
Editováno 14.4.2015 20:48
 
Odpovědět
14.4.2015 20:47
Avatar
rawen
Člen
Avatar
Odpovídá na Ondřej Krsička
rawen:14.4.2015 23:33

Já teda nevim z jakého návodu tady vycházíš a ani jsem nikdy nic podobného neřešil. Ale napadlo mě.. co jít na to trochu vychytrale. :) Odpocnina je v podstatě mocnina, která bude mít převrácený exponent (čitatel za jmenovatel).

public static double Odmocni(double a, double b)
{
    return Math.Pow(a, 1/b);
}
Editováno 14.4.2015 23:36
Nahoru Odpovědět
14.4.2015 23:33
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
rawen
Člen
Avatar
Odpovídá na Ondřej Krsička
rawen:14.4.2015 23:59

Jinak ten problém je bych řekl v tom, že tobě ten while někdy nemusí přesně vyjít. On se jakoby s každým proběhnutým cyklem iteruje směrem k řešení, ale velikost typu double je omezená a on se není schopen iterovat na nějaká 15.pozici už směrem k řešení. Do toho cyklu si přidej výpis aktuálního výsledku, co by to zrovna vrátilo

while (Math.Pow(x, b) != a)
{
    x = v / b;
    y = a / x;
    v = x + y;

    Console.WriteLine(x.ToString());
}

Když tam zadáš nějakou jednoduchou odmocninu třeba 2. odmocnina z 81, tak vidíš, jak se to blíží k řešení, když tam ale zadáš třeba 3. odmocninu z 81 tak ti tam hned skočí nějaké číslo, které se už nemůže s dalším cyklem někam posunout, protože ta hodnota co se ti mění (a jen její vhodná změna může zastavit cyklus) se číselně nemění na pozici, kterou by mohl typ double zaznamenat..

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
14.4.2015 23:59
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
Odpovídá na rawen
Ondřej Krsička:15.4.2015 7:25

Paráda, tak trochu jednodušší způsob. Dík za obě odpovědi

 
Nahoru Odpovědět
15.4.2015 7:25
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.