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

 
Помогите отыскать ошибку, Invalid floating point operation
Велес
Отправлено: 21.11.2003, 12:37


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

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



Добрый день.

Помогите пожалуйста отыскать ошибку в нижеследующем коде:

Данный код расположен в форме Main, в нём используются данные (в том числе одномерный массив из формы Form1). C1 — массив формата long double, все остальные переменные кроме k тоже long double.

long double Sum = C1[0];
int w = Form1->k;
for(int z = 1; z < w; z ++)
{
C1[z] = ((-6 * me * pow (c, 2))*(Form1->alfa[Form1->k])*alfgts)/(((Form1->alfa[Form1->k])/(Form1->ksia[Form1->k]))+(alfgts/ksigts));
Sum += C1[z];
}
RichEdit1->Lines->Insert(0, "" + FloatToStr(Sum));

При запуске приложения. Если работать с пустым массивом (данные не были внесены), то в RichEdit1 выводятся нули. Если же в массив были внесены данные (внесение данные производится в Form1), то при попытке вывести значение Sum в RichEdit1 формы Main выпрыгивает "Invalid floating point operation".

Может со стороны будет лучше видно, где ошибка.

Заранее благодарен.

Отредактировано Велес — 21/11/2003, 13:41
Nick
Отправлено: 21.11.2003, 15:44


Машинист паровоза

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



Возможно деление на 0
Admin
Отправлено: 22.11.2003, 18:01


Владимир

Группа: Администратор
Сообщений: 1190



А вообще для поиска подобных ошибок поставьте в нужных
местах breakpoint — точки прерывания и смотрите значения
переменных в формуле, наведя курсор мыши на переменную в коде.
Установив неправильное значение выясните — откуда
оно взялось.

Другой часто испольуемый способ -
перед расчетом формулы(строки), которая вызыввает ошибку
CODE

C1[z] = ((-6 * me * pow (c, 2))*(Form1->alfa[Form1->k])*alfgts)/(((Form1-
>alfa[Form1->k])/(Form1->ksia[Form1->k]))+(alfgts/ksigts));


выводите значения переменных, и увидите какое из них ошибочное:
CODE

ShowMessage("ksigts = "+FloatToStr(ksigts));
ShowMessage("alfgts = "+FloatToStr((alfgts));
ShowMessage("Form1->k = "+IntToStr(Form1->k));
...
C1[z] = ((-6 * me * pow (c, 2))*(Form1->alfa[Form1->k])*alfgts)/(((Form1-
>alfa[Form1->k])/(Form1->ksia[Form1->k]))+(alfgts/ksigts));




Отредактировано Admin — 22/11/2003, 19:09

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