2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 case быстрее чем if в Delphi? (arseniiv!)
Сообщение21.12.2010, 07:35 
Вопрос в сабже.
Гугл нашел ссылку
http://lingvoforum.net/index.php?topic=20180.25
там arseniiv, сказал, что case быстрее, чем if (когда достаточно много условий, ессно).
Объясните, так это или нет и почему.

 
 
 
 Re: case быстрее чем if в Delphi? (arseniiv!)
Сообщение21.12.2010, 11:02 
Аватара пользователя
Sonic86
1)Дело в том что дельфи практически не умеет оптимизировать, а Case это один момент с которым оптимизатор хорошо работает.
2)
1.
if a+b=0 then
if a+b=1 then

2.
case a+b do
0:
1:

В первом случае a+b вычистился 2 раза (n-раз). во втором 1.
3) А во вторых во втором случае переходы не условные, а представлены табличкой, что снижают проблемы издержек переходов.

 
 
 
 Re: case быстрее чем if в Delphi? (arseniiv!)
Сообщение21.12.2010, 11:42 
Здравствуйте! Ещё хочу добавить, как я читал в справке, ещё чем-то в убыстрении помогают множества, которые, когда они относительно маленького размера, «работают» быстрее, чем сравнения, из-за побитовых операций, которыми они реализуются. Лучше, конечно, проверять на опыте точную границу, когда проверка на принадлежность одному из множеств-альтернатив (если оно не «дырявое») становится медленнее, чем сравнение с границами. Это вроде должно быть примерно когда элементов в нём станет больше примерно разрядности процессора.

Ой, там ведь не сами множества, а «раздетые» до списка диапазонов, потому что с не константами в case сравнивать нельзя. Но реализация-то всё равно должна быть похожей.

Но это всё не относится к случаю, когда в каждой альтернативе по одной константе для сравнения, тут действует только то, что написал Pavia.

-- Вт дек 21, 2010 14:46:05 --

P. S. ЛС бы послали, мог и не заметить тему! :-)

-- Вт дек 21, 2010 14:47:10 --

Pavia, кстати, вы случайно не знаете, стала ли лучше оптимизация в поздних версиях (2008, 2010)?

 
 
 
 Re: case быстрее чем if в Delphi? (arseniiv!)
Сообщение21.12.2010, 12:38 
Pavia
Вас понял! Значит все-таки быстрее! Запомню и буду использовать. Спасибо!
arseniiv писал(а):
Ой, там ведь не сами множества, а «раздетые» до списка диапазонов, потому что с не константами в case сравнивать нельзя. Но реализация-то всё равно должна быть похожей.

:shock: (блин, неужели это тоже надо знать....)

(Оффтоп)

arseniiv писал(а):
P. S. ЛС бы послали, мог и не заметить тему! :-)

Да я чего-то не сразу додумался... :-) а так вряд ли бы Вы тему со своим ником не заметили

 
 
 
 Re: case быстрее чем if в Delphi? (arseniiv!)
Сообщение23.12.2010, 13:29 
2arseniiv
Цитата:
Ой, там ведь не сами множества, а «раздетые» до списка диапазонов

Это как так? Паскалевские множества просто числами обычно же представлены (хотя "стандарт" вроде бы не запрещает и более умные схемы), а проверка принадлежности может быть реализована, ну например, как побитовое И с единицей, сдвинутой влево на (возможно слегка преобразованное) значение элемента. О каких диапазонах идет речь?

Вы про сами числа из которых клеится множетсво при нехватке разрядности говорите или про синтаксис конструирования? Что-то я запутался... :)

 
 
 
 Re: case быстрее чем if в Delphi? (arseniiv!)
Сообщение23.12.2010, 20:23 
2arseniiv
Цитата:
Ещё хочу добавить, как я читал в справке, ещё чем-то в убыстрении помогают множества

Хм, интересно. А можно поподробнее? Спасибо.

 
 
 
 Re: case быстрее чем if в Delphi? (arseniiv!)
Сообщение24.12.2010, 12:42 
Circiter в сообщении #390572 писал(а):
Вы про сами числа из которых клеится множетсво при нехватке разрядности говорите или про синтаксис конструирования?
Да, про синтаксис. После case может следовать то же самое, что в квадратных скобках у множества.

Circiter в сообщении #390726 писал(а):
Хм, интересно. А можно поподробнее? Спасибо.
Справка куда-то задевалась старая, в новых версиях её куда-то подальше убирают, заменяя на не такую подробную. :?

 
 
 [ Сообщений: 7 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group