| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Object Pascal: кроссплатформенные технологии > Какой самый быстрый цикл? |
| Автор: apd2004 20.4.2009, 22:46 |
| Хотелось бы узнать какие операторы цикла лучше выбрать для достижения максимальной скорости в Турбо Паскале 7.0 ??? Что лучше while/repeat/for ??? И ещё,какие операторы больше всего ''съедают" время???? Заранее спасибо! |
| Автор: volvo877 20.4.2009, 23:40 |
| При "прочих равных" - это как? Ничего, что на цикле Repeat/Until безо всяких "прочих равных" (скопированное тело цикла, абсолютно одни и те же вычисления, 2 раздельных запуска программы с интервалом в полчаса для тестирования разных циклов) по сравнению с For-ом имеем больше 10% выигрыша по времени (TP7.0 + WinXP)? Преимущество While - чуть меньше, но все же оно есть, он немного быстрее For-а. |
| Автор: mes 21.4.2009, 00:12 |
может еще раз потестим ?! код Вашего теста не сохранился ?! |
| Автор: SneG0K 21.4.2009, 00:15 |
| На циклах экономить? Ну это вообще извращение! Может тогда вообще писать ничего не будем? Оставим пустой проект? - Ну как же? Вообще мгновенно выполнятся будет. |
| Автор: volvo877 21.4.2009, 01:22 |
| Угу, давайте все темы будем сводить к Мусорке, Флейму и Песочнице, да? Ибо комодератору этих разделов у себя скучно, и он решил залезть в тематику... Нет, давно это было, года 3 назад, может и 4, но попробую что-нибудь сваять... |
| Автор: megabist 21.4.2009, 09:18 |
| SneG0K, mes, На циклах вполне имеет смысл экономить при огромном количестве, маленьких операций. Тестов не проводил, но вроде от препода слышал, что самый быстрый for. |
| Автор: SneG0K 21.4.2009, 13:40 |
| volvo877, а логически рассудить комодеру другого раздела религия не позволяет? Сами подумайте, каждый цикл предназначен для определенных целей. while будет работать пока соблюдается условие for будет работать пока соблюдается условие, но со счетчиком for медленней while. Но если мы начнем с while делать цикл со счетчиком то потеряем продуктивность и вернемся к for, но через while! так разве есть смысл экономить на циклах? Все уже сэкономлено до нас! Лучше лишние проверки и ненужные вызовы вынести за цикл. Тогда будет выгода, а так это коту под хвост. |
| Автор: RinOSpro 21.4.2009, 15:34 | ||||||||||||
| IMHO тут следует выбирать из удобства, и какой цикл подходит к данной ситуации. Вот что показывает отладчик:
Так что много не съэкономите, но если постараться |
| Автор: mes 21.4.2009, 17:34 | ||||||||
Под оптимизацией_цикла подразумевается оптимизация его алгоритма, а не оптимизация путем замены ключевого слова.
вроде или точно ?! кстати,
хочу уточнить, что 1. время изменения счетчика ничтожно мало, и заметно только на фоне пустого цикла. Сокращение одного умножения (в цикле) принесет в десятки раз больше прибыли. 2. Речь идет о старых компиляторах, современные оптимизируют очень хорошо, в том числе полностью исключая пустые циклы и не использованные счетчики. |
| Автор: SneG0K 21.4.2009, 20:16 | ||||||
А кто говорит про умножение?
Идентичен
И смысл? Мы ничего не оптимизировали, но создается впечатление "жирафа"... И разве есть выгода в таком? p.s. сорь, если где синтаксис неправильно объявил, давно уже с паскалем и дельфи не работаю |
| Автор: mes 21.4.2009, 20:34 | ||
жираф это когда говорят что замена цикла for на while (как в вашем посту) принесет оптимизацию и добавит а слон это когда два цикла при прочих равных (т.е while со счетчиком и for) выполняются одинаково. и соответственно осуществлять выбор между этими двумя (и еще repeat) надо в рамках логики и удобства, а не писать все через while из за мнимой выгоды. |
| Автор: SneG0K 21.4.2009, 20:35 |
| mes, полностью согласен |
| Автор: Rodman 21.4.2009, 20:39 |
| ну простом пробеге по циклу пустому не увидеть.. а вот мы экспериментировали с вычислениями, так что фор все быстрее |
| Автор: mes 21.4.2009, 21:09 | ||||
кому верить то ?! а может лучше логическому мышлению и здравому смыслу ?.. Если что взгляните на результаты в машиных кодах представленные выше. |