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

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

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

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

20.01.2011, 13:27. Просмотров 866. Ответов 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]))
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2011, 13:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сравнение long double (Invalid floating...) (C++):

Почему перестает работать программа при замене double на long double? - C++
Здравствуйте! Прошу помощи чтобы разобраться в следующем вопросе: Нашел программу в интернете, запустил - все работает, но когда решил...

long double и double в MSVC 12 одно и тоже, нужна информация,желательно быстрей - C++
Здравствуйте все знают что в VC long double и double одно и тоже, да и при простой проверке это легко выясняется, но нужна информация от...

Вывести long double число без перевода в double - C++
Надо вывести long double число без перевода в double. Пишу: printf(&quot;%Lf&quot;,S); и выводится неверно. Компилятор -- MinGW, та же фишка на...

Error: invalid types 'double [10][10][double]' for array subscript - C++
В 20 21 и 23 строках выдает ошибку error: invalid types 'double ' for array subscript #include &lt;iostream&gt; #include &lt;conio.h&gt; #include...

invalid operands of types ‘double*’ and ‘double’ to binary ‘operator*’ - C++
#include &quot;mpi.h&quot; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;math.h&gt; #define count 120 int main(int argc,char *argv) { ...

Double, int , long double - C++
Как вычислить диапазоны типов вручную указанных в название темы?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Josefina
11 / 11 / 1
Регистрация: 27.09.2010
Сообщений: 32
20.01.2011, 13:45 #2
Код в студию
Самое вероятное - где-то деление на ноль.
Еще предположения: аргумент round не может быть преобразован в целое число, либо отрицательное значение, при извлечении квадратного корня, либо логарифмическая функция возвращает равное нулю или отрицательное значение
Ну, или самое маловероятное переполнился стек)
0
SpideR13
0 / 0 / 0
Регистрация: 02.06.2010
Сообщений: 7
20.01.2011, 14:02  [ТС] #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;
}
0
Josefina
11 / 11 / 1
Регистрация: 27.09.2010
Сообщений: 32
21.01.2011, 08:21 #4
Не здесь, случайно, ошибка выдается?
C++
1
2
X[i]=StrToFloat(Grid->Cells[1][i+1]);
Y[i]=StrToFloat(Grid->Cells[2][i+1]);
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
21.01.2011, 08:36 #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 - целочисленные, хотя, если бы они были вещественные, было бы другое сообщение (о неправильном числе при индексации)
0
SpideR13
0 / 0 / 0
Регистрация: 02.06.2010
Сообщений: 7
21.01.2011, 14:10  [ТС] #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 нет =(
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2011, 14:10
Привет! Вот еще темы с ответами:

Invalid floating point operation при работе с массивами - C++
Ввожу целочисленный и float массив. При поиске минимального значения массива float, выскакивает ошибка invalid floating point operation. С...

Long Double - C++
Разве нет типа более емкого, чем Double в Visual studio? Long Double, как я понял, определяется как обычный Double. А мне нужен аналог по...

Long float и double - C++
В чем отличие long float от double?

Округление Long double. - C++
Нужно округлить число типа long double в меньшую сторону т.е. просто обнулить всю дробную часть, но при этом надо сохранить эту самую...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.01.2011, 14:10
Ответ Создать тему
Опции темы

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