Pull to refresh

Comments 28

Да, еще в школе об этом рассказывают.
Повезло вам со школой, мне основные знания о программировании как-то без школы пришлось получать.
Полузачот решению, при a=a+b может быть переполнение.
Надо делать через xor
С нетерпением ждем топика про то, как написать «хелоу ворлд».
Про переполнение и исключающее или заметили правильно выше.
ok, в следующий раз напишу про Hello World, хотя на википедии вроде про него уже все написано ;)
Что-то мне подсказывает что даже mov'ов здесь больше будет чем с 'c', не говоря уже про сложение с вычитанием =) Мне больше нравятся аппаратные функции swap.
UFO just landed and posted this here
Тільки для програмування це не вигідне за часом, програш пам'яті на одну змінну значно менший за програш за часом.
Із зайвою змінною виконується 3 дії, а без неї - аж 6, тобто вдвічі більше.
Та й ідея не нова.
Тому незалік. Чекаємо наступних рішень! ;)
UFO just landed and posted this here
Извините, постараюсь избегать далее. На такую реакцию я и ожидал. Просто это сложновато. :)
Тепер перевод сказанного.

Только для программирования это невыгодно по времени, поригрыш памяти на одну переменную значительно меньший проигрыша по времени.
С лишней переменной выполняется 3 действия, а без нее - целых 6, т.е. в два раза больше.
Да и идея не нова.
Поэтому незачет. Ждем следующих решений!

ПС. Решение с xor уже лучше, но оно вылетает в некоторых случаях, сейчвас, правда, не помню, в каких...
А как вы оцениваете проигрыш памяти? Почему считаете что он меньше? Программировать ведь можно не только под PC с их гигабайтами ;-)

PS пойду учить украинский.
Дерзайте, удачи! ;)

Сколько байт занимает переменная каждого типа, думаю, вы и так знаете.
А оценка хотя бы по отношению: времени в два раза меньше, а памяти больше только в полтора. :)

ПС. Я занимаюсь олимпиадным программированием, поэтому экономия времени важнее. В других сферах, возможно, по-другому.
Оценивать можно лишь относительно задачи и оборудования. Если операция делается за 10 миллисекунд, а можно делать и за 200, но при этом памяти мало — будешь оптимизировать в эту сторону. Ну и наоборот.
А в олимпиадах еще экономия времени написания важна, да и там PC, вряд ли память так критична.
действительно, не стоит забывать что вы имеете дело с москалями
Как можно было догадаться писать на украинском языке на русскоязычном портале?
это была порверка на понимаемость. проверка не удалась. :(
Вполне удалась, мне кажется. Абсолютно точно показало что неуважение (в виде заведомо неудобочитаемого для большинства аудитории текста) влечет за собой негатив.
Такое решение прокатит только с numeric-значениями.
А к чему весь сыр-бор? Где у нас остались места, в которых нельзя втыкнуть 3-ью переменную? Разве что MK-61...
Ждал в первых комментариях вариацию на тему с использованием *,/
Был одним из тех, кто догадался как это сделать. Хотя сейчас, вещи чуть более сложные этой, порой, вызывают серьезные затруднения. :))
респект. Я чувствую что и за 15-30 минут не догадался бы ;)
На уровне ассемблера вы все равно ничего не выигрываете, скорее наоборот. Для того, чтобы произвести указанную операцию, требуется минимум один свободный регистр и три операции: add, sub, sub, ну и ещё сколько-то mov.

Если же писать с третьей переменной, то вполне можно ожидать, что компилятор заметит, что третья переменная не используется больше нигде и вынесет её в регистр, а саму операцию заменит на xchg. Итого получится: загрузили одну переменную в регистр, xchg с другой переменной, записали регистр в переменную.

Так что если брать описанный способ, то он заведомо в проигрыше, так как его вряд ли оптимизируешь при недостатке памяти (а значит, и недостатке свободных регистров). Хотя несомненно, сам по себе очень интересен, и заставил задуматься и убедиться что действительно работает.

PS. Только что проверил (GCC 4.1.2). Способ с тремя переменными GCC компилирует как 4 mov используя 2 регистра, под третью переменную память не выделяется.

Описанный в статье способ: add, sub, sub, 6 штук mov. Используется 4 регистра, правда недостатка в регистрах нет.
Sign up to leave a comment.

Articles