Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.29;
Скачать: CL | DM;

Вниз

Сообщение компилятора!   Найти похожие ветки 

 
Loginov Dmitry ©   (2005-12-31 14:29) [0]

procedure MyProc(Rows, Cols: Integer);
begin
 if (Rows < 1) or (Cols < 1) or (Rows * Cols > High(Integer)) then
 begin

 end;
end;

На это компилятор отвечает:
- Comparison always evaluates to False,
хотя на самом деле алгоритм вполне корректен и работает как надо

Вопрос: а почему компилятор дает такой ответ?

P.S. С Новым Годом!!!!!!!


 
begin...end ©   (2005-12-31 14:35) [1]

Сообщение относится к части Rows * Cols > High(Integer). Произведение Rows * Cols будет типа Integer, поэтому его значение не может быть больше High(Integer).


 
GuAV ©   (2005-12-31 14:36) [2]


> (Rows * Cols > High(Integer))

Это Comparison всегда False.


 
Loginov Dmitry ©   (2005-12-31 14:43) [3]


> Произведение Rows * Cols будет типа Integer, поэтому его
> значение не может быть больше High(Integer)


А почему тогда алгоритм работает как положено?


 
Lamer@fools.ua ©   (2005-12-31 14:49) [4]

>А почему тогда алгоритм работает как положено?

Значит, пока что везёт.


 
Loginov Dmitry ©   (2005-12-31 15:00) [5]

Кстати, на такое
(Rows * Cols > High(Integer)-1)

компилятор не матерится. Тут не просто везение :)


 
Lamer@fools.ua ©   (2005-12-31 15:05) [6]

>>Loginov Dmitry ©   (31.12.05 15:00) [5]

Учите матчасть.


 
Loginov Dmitry ©   (2005-12-31 15:12) [7]

матчасть, матерится... Какая же здесь связь?
:)


 
Карелин Артем ©   (2005-12-31 15:22) [8]


> Loginov Dmitry ©   (31.12.05 15:12) [7]

Ну не может быть int*int>maxint. Ну потому что переполнение будет!!!!!!!
А как компиллятор работает? Пропускает код?


 
Loginov Dmitry ©   (2005-12-31 15:50) [9]


> Карелин Артем ©   (31.12.05 15:22) [8]


Компилятор вообще такой молодец!

Что по вашему нельзя, по его - можно :)


 
Anatoly Podgoretsky ©   (2005-12-31 15:56) [10]

Loginov Dmitry ©   (31.12.05 14:43) [3]
Он не работает как положено, последнее выражение всегда ложь и поэтому бессмысленно, что компилятор и пытается довести до сознания.


 
Loginov Dmitry ©   (2005-12-31 16:00) [11]


> Anatoly Podgoretsky ©   (31.12.05 15:56) [10]


Теперь глубокий смысл всего ентого дошел и до меня :). Всем спасибо.
А все таки как же тогда правильно все это сравнивать? Может так:
(Rows * Cols < 0)


 
Loginov Dmitry ©   (2005-12-31 16:11) [12]

Хотя еще вариант:

r1, r2: Real;
.....
r1 := Cols;
r2 := Rows;
if r1 * r2 > High(Integer) then ......

Но здесь дополнительные переменные :(

Кто знает, как можно проще это сделать?


 
begin...end ©   (2005-12-31 16:13) [13]

if Int64(Cols * Rows) > High(Integer) then ...

?


 
Anatoly Podgoretsky ©   (2005-12-31 16:16) [14]

Loginov Dmitry ©   (31.12.05 16:00) [11]
А что ты хочешь сделать?
Объясни своими словами.


 
Loginov Dmitry ©   (2005-12-31 16:38) [15]


> А что ты хочешь сделать?
> Объясни своими словами.
>


Если коротко, то хочу обойти этот "недостаток" компилятора.


 
Loginov Dmitry ©   (2005-12-31 16:42) [16]


> begin...end ©   (31.12.05 16:13) [13]
>
> if Int64(Cols * Rows) > High(Integer) then ...
>
> ?


Что, сам не проверял?

Это НЕ РАБОТАЕТ :(


 
GuAV ©   (2005-12-31 16:45) [17]

Loginov Dmitry ©   (31.12.05 16:42) [16]

begin...end © своим вопросом хотел спросить, чего ты этой строкой хотел добится.


> Если коротко, то хочу обойти этот "недостаток"
> компилятора.

Нет, не так. Словами объясни что именно нужно сделать.


 
Anatoly Podgoretsky ©   (2005-12-31 16:45) [18]

Loginov Dmitry ©   (31.12.05 16:38) [15]
Это звдаяв сама в себе, тогда займись чем ни будь полезным.


 
GuAV ©   (2005-12-31 16:47) [19]

упс... мимо...
видимо завести доп. переменную int64 ...

---
c новым...


 
begin...end ©   (2005-12-31 16:48) [20]

if Int64(Cols) * Rows > High(Integer) then ...


 
begin...end ©   (2005-12-31 16:55) [21]

> Anatoly Podgoretsky ©   (31.12.05 16:45) [18]

> звдаяв

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1135863337


 
begin...end ©   (2005-12-31 16:56) [22]

http://delphimaster.net/view/15-1135863337/


 
Loginov Dmitry ©   (2005-12-31 17:02) [23]


> Это звдаяв сама в себе, тогда займись чем ни будь полезным.


Давно отмечаем?
:)


 
Loginov Dmitry ©   (2005-12-31 17:05) [24]


> begin...end ©   (31.12.05 16:56) [22]
>
> http://delphimaster.net/view/15-1135863337/


А клавиатуру я пока что менять не собираюсь (в отличие от всех остальных 8-)


 
begin...end ©   (2005-12-31 17:08) [25]

> Loginov Dmitry

Обратите внимание на [20]. Если Вы вообще заинтересованы в решении заданного вопроса.


 
Loginov Dmitry ©   (2005-12-31 17:13) [26]


> begin...end ©   (31.12.05 17:08) [25]


Заинтерисован... Больше всех :)
ЭТО РАБОТАЕТ!!!! Спасиба вам большое!
С Новым Годом!


 
Anatoly Podgoretsky ©   (2005-12-31 17:34) [27]

Задача так и осталась тайной, видимо на века.


 
Loginov Dmitry ©   (2006-01-01 16:39) [28]

Ну почему на века? Задача прямым образом относится к моей разработке. Эта разработка по идее не должна содержать таких досадных ошибок, как неправильная оценка числа элементов в массиве.
Скоро выйдет очередной релиз, который я хочу протолкнуть далеко за пределы кладовки :)))


 
TUser ©   (2006-01-01 17:54) [29]

> А почему тогда алгоритм работает как положено?

Два других условия работают, а это - лишнее.


 
Loginov Dmitry ©   (2006-01-01 18:25) [30]


> TUser ©   (01.01.06 17:54) [29]


Да все уже проехали давно :)



Страницы: 1 вся ветка

Текущий архив: 2006.01.29;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.031 c
15-1136721768
Нуб
2006-01-08 15:02
2006.01.29
теория ООП


2-1136410992
Spectre_s
2006-01-05 00:43
2006.01.29
Socket


2-1137161449
sanich
2006-01-13 17:10
2006.01.29
Что могла бы значить подобная ошибка?


6-1129532029
Antonyan
2005-10-17 10:53
2006.01.29
подключение к серверу в инете


2-1137048465
Alex7
2006-01-12 09:47
2006.01.29
Координаты диалоговых окон