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

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

Восстановить пароль Регистрация
 
SpideR13
 Аватар для SpideR13
0 / 0 / 0
Регистрация: 02.06.2010
Сообщений: 7
20.01.2011, 13:27     Сравнение long double (Invalid floating...) #1
На этой строчке программа скомпилированная 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++
C++ Long Double
C++ invalid operands of types ‘double*’ and ‘double’ to binary ‘operator*’
Double, int , long double C++
C++ long double и double в MSVC 12 одно и тоже, нужна информация,желательно быстрей
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Josefina
 Аватар для Josefina
10 / 10 / 1
Регистрация: 27.09.2010
Сообщений: 32
20.01.2011, 13:45     Сравнение long double (Invalid floating...) #2
Код в студию
Самое вероятное - где-то деление на ноль.
Еще предположения: аргумент round не может быть преобразован в целое число, либо отрицательное значение, при извлечении квадратного корня, либо логарифмическая функция возвращает равное нулю или отрицательное значение
Ну, или самое маловероятное переполнился стек)
SpideR13
 Аватар для 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
 Аватар для 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
4837 / 3236 / 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
 Аватар для 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...)
Ответ Создать тему
Опции темы

Текущее время: 20:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru