Главная страница
    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.037 c
15-1135963908
sniknik
2005-12-30 20:31
2006.01.29
GIF анимация, эффект развивающегося флага.


1-1135600351
Barsky
2005-12-26 15:32
2006.01.29
Загрузить процессор. Фантазии не хватает.


15-1136717259
Piter
2006-01-08 13:47
2006.01.29
Magic Forum признали :)


15-1136355559
Думкин
2006-01-04 09:19
2006.01.29
Новый год. Чувство праздника.


15-1136983081
вразлет
2006-01-11 15:38
2006.01.29
Sound





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский