Форум: "Прочее";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];
ВнизСообщение компилятора! Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.034 c