|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
07.06.2014, 20:28 | #11 | |||
Новичок
Джуниор
Регистрация: 11.10.2011
Сообщений: 3,882
|
Точно, Вадим-Зоркий_глаз.
Изначальный вариант Цитата:
Цитата:
Цитата:
Последний раз редактировалось Poma][a; 07.06.2014 в 20:32. |
|||
07.06.2014, 20:51 | #12 | |
Старожил
Регистрация: 12.11.2010
Сообщений: 8,568
|
Цитата:
и проверь ещё мой то сообщение, на которое ты мне отвечаешь, там есть дополнения, которых ты, возможно, не видел Последний раз редактировалось Вадим Мошев; 07.06.2014 в 20:57. |
|
07.06.2014, 21:02 | #13 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Нет там одинаковых условий - в цикле FOR есть умножение на 2, оно и съедает все преимущества. Можно попробовать заменить его сдвигом
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
07.06.2014, 21:54 | #15 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,591
|
Условия не одинаковые. В for присутствует лишняя операция умножения. Но ее можно заменить на shl 1, будет быстрее (на сколько - не проверял).
E-Mail: arigato.freelance@gmail.com
|
07.06.2014, 22:55 | #16 |
Старожил
Регистрация: 26.04.2008
Сообщений: 2,645
|
У меня дизассемблер показал, что фри паскаль и for и repeat слепил в одно и то же (логично, если учесть, что for'a в ассемблере нет) (только у варианта с while добавился один jmp). Но в цикле for была проверка на чётность, что добавило 2 инструкции (sub и lea, если память не изменяет - в обед ещё проверял).
Кстати варианты с mod и odd получились практически одинаковыми. Разница в том, что при использовании odd смещения были кратны 8, а при mod - кратны 4, всё остальное одинаково. Но это на оптимизацию компилятора списать можно |
07.06.2014, 22:59 | #17 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
В общем случае не может быть одно и тоже - FOR один раз вычисляет выражения от и до, а WHILRE и REPEAT каждый раз при проверке условия. В основном за счет этого и разная эффективность маш.кода
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
07.06.2014, 23:00 | #18 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,591
|
На сколько я знаю (требуется проверка) при использовании for переменная-счетчик может быть размещена вообще в регистре, чего не будет в while.
E-Mail: arigato.freelance@gmail.com
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Дан двумерный массив А размера n*n . Найти произведение не нулевых элементов массива А находящийся в четных столбцах (Delphi) | Kat9 | Помощь студентам | 1 | 02.03.2014 19:11 |
Подсчитать сумму отрицательных четных чисел, количество четных чисел кратных 3 и т.д. (pascal abc .net) | kardinalmax | Общие вопросы .NET | 1 | 24.01.2014 09:28 |
Составить программу массива: Найти наименьшее из четных и произведение нечетных чисел, входящих в последовательность | kolia_y | Паскаль, Turbo Pascal, PascalABC.NET | 8 | 06.10.2013 09:39 |
Найти произведение элементов массива, не равных 0 и стоящих на четных местах ( Delphi ) | Nikta1111 | Помощь студентам | 1 | 06.12.2011 08:27 |
вычислить произведение четных чисел в каждой строке массива. | Oliver Sykes | Паскаль, Turbo Pascal, PascalABC.NET | 5 | 09.10.2008 03:43 |