Russian Qt Forum
Ноябрь 23, 2024, 22:22 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Функция от одного аргумента возвращает разные значения ?  (Прочитано 2283 раз)
Белый пони
Гость
« : Март 05, 2011, 10:56 »

Здравствуйте!
Совсем не могу понять как так.

вот функция fX(r):
Код:
double MainWidget::fX( double r)
{
double f = sqrt( r*r + l13*l13 - 2 * r * l13 * cos( beta23 - falpha(r)) ) - r*sqI13;
return f;
}

double MainWidget::falpha( double r)
{
double a = acos ( (r*r + l12*l12 - r*r*I1/I2) / (2 * r * l12) );
if( isnan(a)) a = 0;
return a;
}

При этом такой кусок кода:
Код:
void MainWidget::toFile()
{
double hi;
...

std::cerr << " hi = " << hi << std::endl;
std::cerr << "fX ( "<< hi << " ) = " << fX( hi ) << std::endl;
hi = 233.623;
std::cerr << "fX ( "<< hi << " ) = " << fX( hi ) << std::endl;
}

выдаёт такой результат:
Код:
hi = 233.623
fX ( 233.623 ) = 34.367
fX ( 233.623 ) = -71.3663

Как так получается  Непонимающий  Я не понимаю каких-нибудь основ С++ ?

(остальные переменные - l12, l13, beta23, I1, I2, sqI13 - члены класса MainWidget, вычисляемые один раз в конструкторе)
Записан
SimpleSunny
Гость
« Ответ #1 : Март 05, 2011, 11:13 »

Зайдите под отладчиком в эти функции и посмотрите что не так (:

К тому же аргументы могут быть не совсем одинаковыми, при выводе могли потеряться разряды у double.
Записан
Белый пони
Гость
« Ответ #2 : Март 05, 2011, 14:03 »

К тому же аргументы могут быть не совсем одинаковыми, при выводе могли потеряться разряды у double.
Да, так и было Улыбающийся
Хотя всего четвёртый знак после запятой, но у арккосинуса по краям бесконечная производная, и итоговая ошибка получалась большой.

Ошибка была в том, что выражение
Код:
if( isnan(a)) a = 0; 
учитывает только случай  аргумент > +1.

отдельно расписал условия для -1 и +1 и всё заработало.

Спасибо Улыбающийся  
« Последнее редактирование: Март 05, 2011, 14:17 от Белый пони » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.059 секунд. Запросов: 20.