Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++|Pascal] a + b, сложить два числа 
:(
    Опции темы
Mymik
Дата 27.8.2007, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: нет
Всего: 78



Господа, а можно ли сложить два числа не используя операцию плюс (+) ???
Asm нельзя использовать... можно только C++ || Pascal. Есть ли какие идеи ???


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
setq
Дата 27.8.2007, 22:51 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Код

a - - b

  Вверх
Mymik
Дата 27.8.2007, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: нет
Всего: 78



setq, :о) хитро... ладно. Ну а используя бинарные опреации ??? т.е. мне надо выполнить сложение быстрее чем операции a+b... как можно это сделать ???

Это сообщение отредактировал(а) Mymik - 27.8.2007, 22:58


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
JackYF
Дата 28.8.2007, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 2
Всего: 162



Цитата(Mymik @  27.8.2007,  22:57 Найти цитируемый пост)
т.е. мне надо выполнить сложение быстрее чем операции a+b

думаешь, в процессоре плохо соптимизировали команду add? имхо, не получится быстрее.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Mymik
Дата 28.8.2007, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: нет
Всего: 78



JackYF, во времена своей молодости и глупости(я тогда еще даже помнил C++  smile ), я проверял что быстрее работает а++ или а+=1 или а=а+1
На миллионе операций последний классический вариант работал на несколько сотых долей секунды быстрее нежели все остальные :о).
Так что не факт -->>
Цитата(JackYF @  28.8.2007,  00:01 Найти цитируемый пост)
думаешь, в процессоре плохо соптимизировали команду add? имхо, не получится быстрее


Ну а вообще если ничего не будет :о(... то сделаю классическим вариантом :о) c=a+b :o)


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
Guedda
Дата 28.8.2007, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 6
Всего: 78



Код

a := 13;
b := 10;
c  := a;
for i := 1 to b do
  Inc(c);


Это сообщение отредактировал(а) Guedda - 28.8.2007, 09:54


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
JackYF
Дата 28.8.2007, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 2
Всего: 162



Цитата(Mymik @  28.8.2007,  08:47 Найти цитируемый пост)
На миллионе операций последний классический вариант работал на несколько сотых долей секунды быстрее нежели все остальные :о).

учитывая, что все эти конструкции с точки зрения нормального компилятора идентичны... весело. ++a забыл.  smile 


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Mymik
Дата 28.8.2007, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: нет
Всего: 78



Guedda, а че, в паскале цикл работает быстрее чем просто сложение ??? O_o Если я не ошибаюсь, то цикл в паскале трансформируется в машинный код точно так же как и в других языках... т.е. тоже loop будет...

Цитата(JackYF @  28.8.2007,  11:12 Найти цитируемый пост)
++a забыл.  smile

Улыбнуло :о)  smile 

Всем спасибо, наверное в c++ нет никакого иного способа сложения чисел быстрее чем a+b.



--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
Guedda
Дата 28.8.2007, 23:16 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 6
Всего: 78



Цитата(Mymik @  28.8.2007,  19:49 Найти цитируемый пост)
быстрее чем a+b.

Что в Си, что в паскале, как и в других языках, операция + звучит так:
Код

mov c,a
add c,b

Это самое быстрое действие сложения.


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
zkv
Дата 8.9.2007, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 21
Всего: 92



Цитата(Mymik @  28.8.2007,  08:47 Найти цитируемый пост)
во времена своей молодости и глупости(я тогда еще даже помнил C++  smile ), я проверял что быстрее работает а++ или а+=1 или а=а+1

а когда это было? smile
с современными компиляторами трудно тягаться в оптимизации подобных вещей. 
стараться оптимизировать нужно на более высоком уровне - на алгоритмическом, а здесь еще неизвестно, у кого лучше выйдет, у компилятора, или программера smile

ради интереса попробовал такой код:
Код

    long a = 0;
    a = a + 1;
    ++a;
    a++;
    
вот такой код сгенерил VC++8.0 (без оптимизации):
Код

    long a = 0;
004010A4  mov         dword ptr [a],0 
    a = a + 1;
004010AB  mov         eax,dword ptr [a] 
004010AE  add         eax,1 
004010B1  mov         dword ptr [a],eax 
    ++a;
004010B4  mov         eax,dword ptr [a] 
004010B7  add         eax,1 
004010BA  mov         dword ptr [a],eax 
    a++;
004010BD  mov         eax,dword ptr [a] 
004010C0  add         eax,1 
004010C3  mov         dword ptr [a],eax 

а с оптимизацией вообще скипнул.

Мои извинения, что влез со своими суждениями, а не с ответом на вопрос, но может пригодятся  smile  
PM MAIL   Вверх
JackYF
Дата 8.9.2007, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 2
Всего: 162



zkv, а во втором случае, имхо, нужно было бы

Код

add         dword ptr [a], 1


Наверняка с оптимизацией это бы и было бы, просто скипанье кода - большая проблема для программеров, компиляторы слишком умные smile


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0525 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.