Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++|Pascal] a + b


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

Автор: setq 27.8.2007, 22:51
Код

a - - b

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

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

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

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


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

Автор: Guedda 28.8.2007, 09:53
Код

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

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

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

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

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

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

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

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

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

mov c,a
add c,b

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

Автор: zkv 8.9.2007, 10:06
Цитата(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  

Автор: JackYF 8.9.2007, 22:09
zkv, а во втором случае, имхо, нужно было бы

Код

add         dword ptr [a], 1


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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)