C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
ACOS: DOMAIN error, Помогите решить проблему.
ozx
  Отправлено: 19.04.2005, 22:36


Ученик-кочегар

Группа: Участник
Сообщений: 9



Люди помогите пожалуйсто.
Есть такой код:
CODE

 Q = b-L1*sin(FI);
 P = a-L1*cos(FI);
 F = (P*P+Q*Q+L2*L2-L3*L3)/(2*L2);

 PSI = 2*atan((Q+sborka*sqrt(Q*Q+P*P-F*F))/(P+F));
 KSI = acos((L2*cos(PSI)+L1*cos(FI)-a)/(L3));

Если выражение под корнем <0
CODE
sqrt(Q*Q+P*P-F*F)

то возникает ошибка программы с текстом:
SQRT: DOMAIN error,
а затем
ACOS: DOMAIN error.

Как можно подавить эти сообщения. Необходимо, что бы программа не обращала внимание на эти ошибки.
Георгий
Отправлено: 19.04.2005, 23:25


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



пара try catch не помогает?
FataLL
Отправлено: 20.04.2005, 02:53


Дежурный стрелочник

Группа: Участник
Сообщений: 37



Блин, а просто
CODE

double dNum = ...
if( dNum >= 0.0 )
{
sqrt...
}

не канает? Дожили... cool.gif

Отредактировано FataLL — 20/04/2005, 02:53
ozx
Отправлено: 20.04.2005, 09:51


Ученик-кочегар

Группа: Участник
Сообщений: 9



пробовал
CODE

try
{
 sqrt...
}
catch(...)
{
}

Но все равно, ошибки возникают. Может я что-то ни то делаю.

А по-поводу второго варианта, это второе что мне пришло в голову, после try catch, Но я хочу понять, почему, ошибки не подавляются.

Возможно это из-за того что в блоке try я разместил много формул. Хотя я сомневаюсь.
FataLL
Отправлено: 21.04.2005, 11:40


Дежурный стрелочник

Группа: Участник
Сообщений: 37



Копни здесь попробуй:
CODE

#include <math.h>
#include <string.h>
#include <stdio.h>

int _matherr (struct _exception *a)
{
if (a->type == DOMAIN)
if (!strcmp(a->name,"sqrt")) {
a->retval = sqrt (-(a->arg1));
return 1;
}
return 0;
}

int main(void)
{
double x = -2.0, y;
y = sqrt(x);
printf("_Matherr corrected value: %lf\n",y);
return 0;
}


Все верно. try catch обрабатывает только функции Math.hpp, а там корня нет. Ты используешь sqrt, а его ошибка ловится _matherr. Там еще длинная версия есть, если чё...

Отредактировано FataLL — 21/04/2005, 11:51
ozx
Отправлено: 22.04.2005, 22:13


Ученик-кочегар

Группа: Участник
Сообщений: 9



Огромное спасибо FataLL. Ты мне очень помог.
Всё вроде как работает smile.gif

Вернуться в Вопросы программирования в C++Builder