Показать сообщение отдельно
Старый 02.08.2010, 15:01   #2 (permalink)
Long Cat
Banned
 
Регистрация: 01.09.2009
Сообщений: 4,396
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2544
По умолчанию

Во-первых, ваша программа неверно оформлена - используйте тег [code].
Во-вторых, ваша переменная rez не инициализируется перед входом в цикл, из-за этого все чудеса.
В-третьих, ваш метод половинного деления реализован неверно - он не сходится.
Вот пример правильной реализации:
Код:
double isqrt(double k)
{
    if(k==1)
    {
        return(1);
    }
    double a=0;
    double b=k;
    while(true)
    {
        const double mid=((b-a)/2.0)+a;
        if(b-a<=0.0001)
        {
            return(mid);
        }
        const double fc=mid-k/mid;
        if(fc==0)
        {
            return(mid);
        }
        if(fc>0)
        {
            b=mid;
        }
        else
        {
            a=mid;
        }
    }
}

Последний раз редактировалось Long Cat; 02.08.2010 в 19:11
Long Cat вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070