Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
2-1136805696
LionMen
2006-01-09 14:21
2006.01.29
Ошибка: OLE error 800A03EC


3-1133126146
evvcom
2005-11-28 00:15
2006.01.29
Однократное выполнение VIEW при многократном ее JOIN-е в запросе


4-1132058595
bogdan
2005-11-15 15:43
2006.01.29
ограничение доступа к файлу или каталогу


15-1136505507
BiggieSmalls
2006-01-06 02:58
2006.01.29
Еще вопрос по серийному номеру тома


2-1137174021
St74
2006-01-13 20:40
2006.01.29
Как DLL правильно заполнить строковыми ресурсами, и потом достать





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский