Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
SpideR13
0 / 0 / 0
Регистрация: 02.06.2010
Сообщений: 7
#1

Сравнение long double (Invalid floating...) - C++

20.01.2011, 13:27. Просмотров 857. Ответов 5
Метки нет (Все метки)

На этой строчке программа скомпилированная C++ Builder 2009 выдает ошибку Invalid floating point operation, хотя программа скомпилированная C++ Builder 6.0 работает и спокойно сравнивает эти числа.
Все переменные имеют тип long double.
Читал про сравнение вещественных чисел, но нашел только другую запись сравнения "==".
Как это можно исправить?

C++
1
if((intX[i][0]<=X[m])&&(intX[i][1]>X[m])&&(intY[j][0]<=Y[m])&&(intY[j][1]>Y[m]))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2011, 13:27     Сравнение long double (Invalid floating...)
Посмотрите здесь:

описание long double в С C++
Округление Long double. C++
C++ Преобразование long double в string
C++ Long Double
Вывод константы long double C++
long double и char C++
C++ Перевод long double в строку
Long double отображается не верно C++
Преобразование string в long double C++
C++ Преобразование long double в char
C++ Invalid floating point operation при работе с массивами
Long double и Borland 3.1 C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Josefina
10 / 10 / 1
Регистрация: 27.09.2010
Сообщений: 32
20.01.2011, 13:45     Сравнение long double (Invalid floating...) #2
Код в студию
Самое вероятное - где-то деление на ноль.
Еще предположения: аргумент round не может быть преобразован в целое число, либо отрицательное значение, при извлечении квадратного корня, либо логарифмическая функция возвращает равное нулю или отрицательное значение
Ну, или самое маловероятное переполнился стек)
SpideR13
0 / 0 / 0
Регистрация: 02.06.2010
Сообщений: 7
20.01.2011, 14:02  [ТС]     Сравнение long double (Invalid floating...) #3
Ввод X и Y
C++
1
2
3
4
5
6
7
void __fastcall Massiv(TStringGrid *Grid)
{
for(int i=0;i<N;i++) {
X[i]=StrToFloat(Grid->Cells[1][i+1]);
Y[i]=StrToFloat(Grid->Cells[2][i+1]);
}
}
Нахождение переменных intX,intY;
C++
1
2
3
4
5
6
for(int i=0;i<K;i++) {
intX[i][0]=Xmin+hx*i;
intX[i][1]=intX[i][0]+hx;
intY[i][0]=Ymin+hy*i;
intY[i][1]=intY[i][0]+hy;
}
Josefina
10 / 10 / 1
Регистрация: 27.09.2010
Сообщений: 32
21.01.2011, 08:21     Сравнение long double (Invalid floating...) #4
Не здесь, случайно, ошибка выдается?
C++
1
2
X[i]=StrToFloat(Grid->Cells[1][i+1]);
Y[i]=StrToFloat(Grid->Cells[2][i+1]);
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
21.01.2011, 08:36     Сравнение long double (Invalid floating...) #5
C++
1
if((intX[i][0]<=X[m])&&(intX[i][1]>X[m])&&(intY[j][0]<=Y[m])&&(intY[j][1]>Y[m]))
операции отношения и сравнения имеют приоритет выше, чем у логических операций && и ||
поэтому кучу скобок можно просто убрать
убедиться, что переменные i, m, j - целочисленные, хотя, если бы они были вещественные, было бы другое сообщение (о неправильном числе при индексации)
SpideR13
0 / 0 / 0
Регистрация: 02.06.2010
Сообщений: 7
21.01.2011, 14:10  [ТС]     Сравнение long double (Invalid floating...) #6
Скобки я себе для удобства поставил. i,j,m целочисленные 100%
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
int Kol;
for(int i=0; i<K; i++){
 for(int j=0; j<K; j++){
  Kol=0;
   for(int m=0; m<=N; m++){
    KolSV[i][j]=Kol;
    if(i==K-1&j==K-1){
     if((intX[i][0]<=X[m])&&(intX[i][1]>=X[m])&&(intY[j][0]<=Y[m])&&(intY[j][1]>=Y[m])){
     Kol+=1;}
    }
    else if(i==K-1) {
    if((intX[i][0]<=X[m])&&(intX[i][1]>=X[m])&&(intY[j][0]<=Y[m])&&(intY[j][1]>Y[m])){
     Kol+=1;}
    }
    else if(j==K-1) {
    if((intX[i][0]<=X[m])&&(intX[i][1]>X[m])&&(intY[j][0]<=Y[m])&&(intY[j][1]>=Y[m])){
     Kol+=1;}
    }
    else {
    if((intX[i][0]<=X[m])&&(intX[i][1]>X[m])&&(intY[j][0]<=Y[m])&&(intY[j][1]>Y[m])){
     Kol+=1;}
    }
  }
 }
}
Полный этого участка. Ошибку пишет именно на этих 4-ех if'ах. И непонятно, почему *.exe'шних от 6.0 спокойно все это считает, а от 2009 нет =(
Yandex
Объявления
21.01.2011, 14:10     Сравнение long double (Invalid floating...)
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru