2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 case быстрее чем if в Delphi? (arseniiv!)
Сообщение21.12.2010, 07:35 
Заслуженный участник


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

 Профиль  
                  
 
 Re: case быстрее чем if в Delphi? (arseniiv!)
Сообщение21.12.2010, 11:02 
Аватара пользователя


31/10/08
1244
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 
Заслуженный участник


27/04/09
28128
Здравствуйте! Ещё хочу добавить, как я читал в справке, ещё чем-то в убыстрении помогают множества, которые, когда они относительно маленького размера, «работают» быстрее, чем сравнения, из-за побитовых операций, которыми они реализуются. Лучше, конечно, проверять на опыте точную границу, когда проверка на принадлежность одному из множеств-альтернатив (если оно не «дырявое») становится медленнее, чем сравнение с границами. Это вроде должно быть примерно когда элементов в нём станет больше примерно разрядности процессора.

Ой, там ведь не сами множества, а «раздетые» до списка диапазонов, потому что с не константами в 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 
Заслуженный участник


08/04/08
8562
Pavia
Вас понял! Значит все-таки быстрее! Запомню и буду использовать. Спасибо!
arseniiv писал(а):
Ой, там ведь не сами множества, а «раздетые» до списка диапазонов, потому что с не константами в case сравнивать нельзя. Но реализация-то всё равно должна быть похожей.

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

(Оффтоп)

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

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

 Профиль  
                  
 
 Re: case быстрее чем if в Delphi? (arseniiv!)
Сообщение23.12.2010, 13:29 
Заслуженный участник


26/07/09
1559
Алматы
2arseniiv
Цитата:
Ой, там ведь не сами множества, а «раздетые» до списка диапазонов

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

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

 Профиль  
                  
 
 Re: case быстрее чем if в Delphi? (arseniiv!)
Сообщение23.12.2010, 20:23 
Заслуженный участник


26/07/09
1559
Алматы
2arseniiv
Цитата:
Ещё хочу добавить, как я читал в справке, ещё чем-то в убыстрении помогают множества

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

 Профиль  
                  
 
 Re: case быстрее чем if в Delphi? (arseniiv!)
Сообщение24.12.2010, 12:42 
Заслуженный участник


27/04/09
28128
Circiter в сообщении #390572 писал(а):
Вы про сами числа из которых клеится множетсво при нехватке разрядности говорите или про синтаксис конструирования?
Да, про синтаксис. После case может следовать то же самое, что в квадратных скобках у множества.

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group