Dimon.Ru |
Отправлено: 24.10.2005, 08:51 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 92
|
Добрый день!
понимаю, что вопрос из разряла ламерских, но я не могу понять откуда она берется.... полдня вчера просидел, но так и не понял.
на строке double a = (rov * 10e-4)/(gammat * pow(dro,2));
вылазит ошибка "Invalid floating point operation"...
не могу понять что там такое....
никогда такой не было. вроде бы типы все соблюдены.
в принципе, ошибка вылазит при попытке совершить какое-либо арифметическое действие и, кстати, при попытке вернуть какое-либо значение из функции. при простом присваивании значения все проходит нормально.
до расчета формулы все переменные объявлены и им присвоены значения.
CODE |
double dro, rov, gammat;
rov = jetForm->rovEdit->Text.ToDouble();
gammat = jetForm->gammatEdit->Text.ToDouble();
dro = jetForm->dsoplEdit->Text.ToDouble();
***
double a = (rov * 10e-4)/(gammat * pow(dro,2));
|
надо сказать, что в месте *** я еще делаю выделение памяти под большой двумерный массив... но если бы там были ошибки, то вылезало бы Access Violation.
Если надо, выложу исходник |
|
AVC |
Отправлено: 24.10.2005, 09:19 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Это что то лично ваше. Так все работает.
CODE |
#include <math.h>
void __fastcall TF_Main::BitBtn1Click(TObject *Sender)
{
double dro, rov, gammat;
rov = 1;
gammat = 2;
dro = 3;
double a = (rov * 10e-4)/(gammat * pow(dro,2));
ShowMessage(FormatFloat("0.0000000", a));
}
| |
|
Grigoriy |
Отправлено: 24.10.2005, 12:57 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
Надо бы перед вычислением дроби проверять, не равен ли нулю знаменатель.
|
|
Dimon.Ru |
Отправлено: 24.10.2005, 13:27 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 92
|
Блин, а что же это может быть?
ну прямо совсем странно..... |
|
** pasha |
Отправлено: 25.10.2005, 20:06 |
|
Не зарегистрирован
|
Grigoriy ответил.
Скорее всего (gammat * pow(dro,2)); равно 0
деление на 0
Отловить то легко — в отладчик и все дела. |
|