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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка на чётность, MS VC ++ 6.0 
:(
    Опции темы
Nuzur
Дата 22.12.2004, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



А ка проверить число на ченость, есть такая функция, мол четное число или нет.


--------------------
Never again...
PM MAIL   Вверх
NiJazz
Дата 22.12.2004, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 1
Всего: 23



Nuzur
Чётное - если делится на 2. smile
Код

if (my_digit % 2 == 0) // если чётное - остаток от деления на 2 должен быть нулём
{
   is_parity = true;    // переменная определяющая, чётное число или нет. true - чётное, false -  нечетное
}

PM MAIL   Вверх
Nuzur
Дата 22.12.2004, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Спасибо, плюсик не могу поставить smile


--------------------
Never again...
PM MAIL   Вверх
Domestic Cat
Дата 22.12.2004, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 3
Всего: 172



Поставил.


--------------------

PM   Вверх
bel_nikita
Дата 22.12.2004, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



Если оно (число) целое, то просто проверить самый первый бит smile
Код
if ( value & 1 )
{
 // нечетное
}
else
{
 // четное
}
Вот, пару функций:
Код
// проверка на нечетность
template<class T>
inline bool oddnumber(T value) {  return (value & 1); }

// проверка на четность
template<class T>
inline bool evennumber(T value) {  return !(value & 1); }


З.Ы.:
Цитата
Чётное - если делится на 2.
Неа. Четность - если установлен самый первый бит в единицу smile smile

Это сообщение отредактировал(а) bel_nikita - 22.12.2004, 23:36


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
NiJazz
Дата 20.7.2006, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 1
Всего: 23



Странно, если, например, разложить число 23, то получится такой вид: 10111. И где тут чётность? 
PM MAIL   Вверх
Fazil6
Дата 20.7.2006, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата

Странно, если, например, разложить число 23, то получится такой вид: 10111. И где тут чётность? 

правый бит 1 => нечетный если 0 - четный
 
PM MAIL   Вверх
ptr
Дата 20.7.2006, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 661
Регистрация: 31.5.2006
Где: Новосибирск

Репутация: 1
Всего: 14



Цитата(bel_nikita @  23.12.2004,  03:28 Найти цитируемый пост)
Неа. Четность - если установлен самый первый бит в единицу smile smile 

А если у меня процессор не с двоичной логикой, а с троичной? 


--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
sergejzr
Дата 20.7.2006, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Цитата(ptr @  20.7.2006,  09:27 Найти цитируемый пост)
А если у меня процессор не с двоичной логикой, а с троичной?  

Сдай его в музей smile

По идее там чтото вроде проверки последнего значения на 1 (тогда нечётный). Но операции & что там дадут?

Вообще процессоры у нас вроде с четвероичной логикой:

true
false
undefined
buss error

Добавлено @ 11:38 
 Хотя  undefined может и не учитываться.. 


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Fazil6
Дата 20.7.2006, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата

По идее там чтото вроде проверки последнего значения на 1 (тогда нечётный). Но операции & что там дадут?

проверку и дадут 
PM MAIL   Вверх
CatOleg
Дата 20.7.2006, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 14.7.2005
Где: Запорожье

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



if( value % 2 )
{
  value -> нечетное
}
else
{
  value -> четное

PM MAIL WWW   Вверх
Kostt
Дата 21.7.2006, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 169
Регистрация: 8.1.2006
Где: Томск

Репутация: 1
Всего: 3



!(value & 1) - сработает быстрее, чем value % 2, и ни чем не хуже 
PM MAIL   Вверх
ptr
Дата 21.7.2006, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 661
Регистрация: 31.5.2006
Где: Новосибирск

Репутация: 1
Всего: 14



Цитата(sergej.z @  20.7.2006,  15:38 Найти цитируемый пост)
Вообще процессоры у нас вроде с четвероичной логикой:

true
false
undefined
buss error

С двузначной логикой: true (1) и false (0). undefined и buss error не относятся к логике процессора.

Цитата(Kostt @  21.7.2006,  15:33 Найти цитируемый пост)
!(value & 1) - сработает быстрее, чем value % 2, и ни чем не хуже  

Зато с (value%2==0) понятнее что делается, да и не особо медленне чем c (value&1).    

Это сообщение отредактировал(а) ptr - 21.7.2006, 13:22


--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
sergejzr
Дата 21.7.2006, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Цитата(ptr @  21.7.2006,  10:22 Найти цитируемый пост)
Зато с (value%2==0) понятнее что делается, да и не особо медленне чем c (value&1).    

На 32 битном процессоре мрдленнее в 32 раза smile



Цитата(ptr @  21.7.2006,  10:22 Найти цитируемый пост)
С двузначной логикой: true (1) и false (0). undefined и buss error не относятся к логике процессора.

Относятся конечно. На undefined он кладёт, но ошибки он должен логически обрабатывать(что будет, если на бусе одновременно 1 и 0 ?). Это же обыкновенный микрочип. Просто доступа к тий логике у программиста нет. Она на аппаратном уровне. 


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
GremlinProg
Дата 21.7.2006, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 3
Всего: 106



модуль(%) - есть ни что иное, как арифметическое умножение на логарифм правой части выражения по основанию 2, так что операции (% 2) и (& 1) равнозначны, а самый младший бит является признаком нечетного числа (его еще называют parity), т.к. он инвертируется на каждый экземпляр последовательного числового ряда. 


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
bel_nikita
Дата 21.7.2006, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



Цитата(GremlinProg @ 21.7.2006,  18:20)
модуль(%) - есть ни что иное, как арифметическое умножение на логарифм правой части выражения по основанию 2, так что операции (% 2) и (& 1) равнозначны

Операции то равнозначные, но реализации различны. И поэтому "&" - выигрывает у "%" в проверке на четность.

З.Ы: Для тех кто в танке: посмотрите на реализацию % и & через дизассемблер... 


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
GremlinProg
Дата 21.7.2006, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 3
Всего: 106



Код

    int a    = 100;
    if(!(a%2)){
        ::MessageBox(0,0,0,0);
    }


0042602E  mov         dword ptr [a],64h 
00426035  mov         eax,dword ptr [a] 
00426038  and         eax,80000001h 
0042603D  jns         WinMain+34h (426044h) 

Код

    int a    = 100;
    if(!(a&1)){
        ::MessageBox(0,0,0,0);
    }


0042602E  mov         dword ptr [a],64h 
00426035  mov         eax,dword ptr [a] 
00426038  and         eax,1 
0042603B  jne         WinMain+44h (426054h) 


Думаю пояснять ни чего не надо?!

Добавлено @ 20:03 
единственное, в чем преимущество (%), так в том, что проблем с unsigned у вас никогда не будет, поэтому (%) корректнее чем (&) 


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Pete
Дата 21.7.2006, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 318
Регистрация: 5.1.2006
Где: Москва

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



Цитата(bel_nikita @  23.12.2004,  00:28 Найти цитируемый пост)
Код

return !(value & 1);

Это медленнее, чем 
Код

return (value ^ 0);

 smile 

Цитата(ptr @  21.7.2006,  13:22 Найти цитируемый пост)
Зато с (value%2==0) понятнее что делается...

Все зависит от степени привыкания  smile  


--------------------
Совет учиться на ошибках других бесполезен; научиться чему-либо можно только на собственных ошибках. (Бернард Шоу)
Не откладывай на завтра то, что можешь сделать сегодня. (Пословица)
А теперь выпишем точное значение числа пи... (Препод)
Жахни, Пендальф! © Гоблин
PM   Вверх
bel_nikita
Дата 21.7.2006, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



Цитата
единственное, в чем преимущество (%), так в том, что проблем с unsigned у вас никогда не будет, поэтому (%) корректнее чем (&)

Неа, в твоем примере мы видим оптимизацию компилятора, а никак не реализацию smile 


З.Ы.: для танкистов:
Код

196:    int value = 100;
00401028   mov         dword ptr [ebp-4],64h
197:
198:    if ( value % 2 )
0040102F   mov         eax,dword ptr [ebp-4]
00401032   and         eax,80000001h
00401037   jns         main+2Eh (0040103e)
00401039   dec         eax
0040103A   or          eax,0FFFFFFFEh
0040103D   inc         eax
0040103E   test        eax,eax
00401040   je          main+3Fh (0040104f)
199:    {
200:      printf("odd");
00401042   push        offset string "odd" (0042c01c)
00401047   call        printf (004010a0)
0040104C   add         esp,4
201:    }
202:
203:    if ( value & 1 )
0040104F   mov         ecx,dword ptr [ebp-4]
00401052   and         ecx,1
00401055   test        ecx,ecx
00401057   je          main+56h (00401066)
204:    {
205:      printf("odd");
00401059   push        offset string "odd" (0042c01c)
0040105E   call        printf (004010a0)
00401063   add         esp,4
206:    }

 


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
GremlinProg
Дата 22.7.2006, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 3
Всего: 106



Слушай, танкист! не морочь людям мозги. Посмотри на свой же код! 


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
bsa
Дата 22.7.2006, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(GremlinProg @ 22.7.2006,  17:50)
Слушай, танкист! не морочь людям мозги. Посмотри на свой же код!

Код
198:    if ( value % 2 )
0040102F   mov         eax,dword ptr [ebp-4]
00401032   and         eax,80000001h
00401037   jns         main+2Eh (0040103e)
00401039   dec         eax
0040103A   or          eax,0FFFFFFFEh
0040103D   inc         eax
0040103E   test        eax,eax
00401040   je          main+3Fh (0040104f)

против:
Код
203:    if ( value & 1 )
0040104F   mov         ecx,dword ptr [ebp-4]
00401052   and         ecx,1
00401055   test        ecx,ecx
00401057   je          main+56h (00401066)

Что называется - почувствуйте разницу. 
PM   Вверх
bel_nikita
Дата 22.7.2006, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



Цитата(GremlinProg @ 22.7.2006,  16:50)
не морочь людям мозги. Посмотри на свой же код!

ну и ты хоть взгляни, может найдешь отличия smile  


З.Ы.: для тех, кто еще остается в танке - вместо int подставть unsigned ...
 


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
GremlinProg
Дата 24.7.2006, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 3
Всего: 106



Если танкист пишет только в дебаге, то мне пора на пенсию )
Вот релиз, проверка HINSTANCE на четность:

Код

    unsigned a    = (unsigned)(INT_PTR)hInstance;
    if(a%2){
        ::MessageBox(0,0,0,0);
    }
    if(a&1){
        ::MessageBox(0,0,0,0);
    }


00403169  mov         edi,dword ptr [esp+10h] 
0040316D  mov         esi,edi 
0040316F  and         esi,1 
00403172  je          WinMain+1Eh (40317Eh) 
        ::MessageBox(0,0,0,0);
00403174  push        0    
00403176  push        0    
00403178  push        0    
0040317A  push        0    
0040317C  call        ebx  
    }
    if(a&1){
0040317E  test        esi,esi 
00403180  je          WinMain+2Ch (40318Ch) 
        ::MessageBox(0,0,0,0);
00403182  push        0    
00403184  push        0    
00403186  push        0    
00403188  push        0    
0040318A  call        ebx  
    }

Добавлено @ 11:27 
Глупо спорить на тему скорости с оптимизацией VS от самой Microsoft ) 


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
sergejzr
Дата 24.7.2006, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



GremlinProg, а кроме VS других компилеров не существует? % есть остаток от деления и если бы компилер делал то, что ему говорят (А многие так и делают), то провёл бы деление и взял остаток. Ваш промер есть оптимизация кода конкретного компилера и для общего случая он (как пример) не годится.

Точно так же х/2 компилеры оптимизуют в х>>1. Но говорить, что в общем случае деление по скорости совпадает со сдвигом на 1 - бесмыссленно.  


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
GremlinProg
Дата 24.7.2006, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 3
Всего: 106



Проверь на другом компиляторе, чтобы удостовериться в своей правоте.
Цитата
провёл бы деление и взял остаток

Деление целочисленных есть ни что иное, как сдвиг вправо, а остаток от деления - правая часть результата этого сдвига. Зачем делить, если можно просто взять этот остаток Эндом? Оптимизация в любом компиляторе это должна учитывать, иначе на что она нужна, такая оптимизация?
А по поводу 
Цитата
Точно так же х/2 компилеры оптимизуют в х>>1. Но говорить, что в общем случае деление по скорости совпадает со сдвигом на 1 - бесмыссленно.

заблуждаешься: код высокого уровня для того и нужен, чтобы абстрагировать задачу от конкретной её реализации на конкретном компиляторе, поэтому, если необходимо вычислить остаток, то и нужно писать (%), а не (&), а компилятор сам знает, что он должен сделать быстрее, а что - медленнее. Может быть это и прописные истины, но почему-то многие о них забывают.  


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
sergejzr
Дата 24.7.2006, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Цитата(GremlinProg @  24.7.2006,  10:13 Найти цитируемый пост)
заблуждаешься: код высокого уровня для того и нужен, чтобы абстрагировать задачу от конкретной её реализации на конкретном компиляторе, поэтому, если необходимо вычислить остаток, то и нужно писать (%), а не (&), а компилятор сам знает, что он должен сделать быстрее, а что - медленнее. 


Уровень кода тут не причём. Тем более С (о котором мы сейчас в общем-то и говорим). Например освобождение памяти прямо таки опускает на землю абстрактность любой задачи.
Вообще С тем и примечателен, что даёт делать то, что угодно (в отличии он Явы например). И если я хочу, чтобы он делил, он должен делить. 
И компилеров существует масса и никто не может со 100% увереностью сказать во что превратиться его код, если он не будет вручную навязывать это компилятору сам.

Другое дело, что оптимизатор на многих компилерах по умолчанию включен. Это с идеалогической точки зрения как раз ошибочный подход. 


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
dumb
Дата 24.7.2006, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 8
Всего: 158



Цитата(GremlinProg @  24.7.2006,  12:13 Найти цитируемый пост)
Деление целочисленных есть ни что иное, как сдвиг вправо, а остаток от деления - правая часть результата этого сдвига.

где-то в этой фразе должно быть словосочетание "степень двойки"... smile

ps. так и не смог уловить предмет спора. такое впечатление что "каждый о своем"... smile 
PM MAIL   Вверх
GremlinProg
Дата 24.7.2006, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 3
Всего: 106



dumb, похоже прав: я тут говорю о "бессмертном" коде, т.е. код живет и развивается до тех пор, пока его понимают, и как бы вы не издевались над ним, как бы не ускоряли его выполнение - код умирает сразу, если хотя бы часть его становится нечитабельной. sergej.z мешает две абсолютно разные вещи: моделирование и оптимизация. Как известно, моделирование - первостепенная задача - это есть сам процесс создания программы, на этом этапе закладываются основы её функционирования. А оптимизация - второстепенная задача, которая не всегда оправдывает затраты: оптимизировать можно вечность, а результат будет скрыт от глаз пользователя за толщей интерфейсов операционной системы, и даже не важно какой. 


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
sergejzr
Дата 24.7.2006, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Цитата(dumb @  24.7.2006,  10:26 Найти цитируемый пост)
ps. так и не смог уловить предмет спора. такое впечатление что "каждый о своем"... smile  

Предмет в том, что GremlinProg утверждаетм что х%2 и х&1 - одинаковые операции.
Я же придерживаюсь мнения, что это может быть верно, но после оптимизации на конкретном компиляторе. 


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
GremlinProg
Дата 24.7.2006, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 3
Всего: 106



не совсем так, я пытался объяснить, почему нельзя использовать такие оптимизации в коде. И показал пример, который визуально указывает на разные действия, в данном случае модуль и умножение, а практически делает одно и то же. Объяснил, почему для разработчика так важно знать, что действительно происходит в коде, т.е. что он имел ввиду, когда писал код. Если над проектом работает один программист, то, конечно, можно положиться на его память и надеяться на то, что через пару недель, месяцев, лет он таки вспомнит свои действия. Но, если над проектом работает несколько программистов, то бишь группа, тогда с такими подходами, как у sergej.z, сработаться им будет крайне сложно.

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


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
sergejzr
Дата 24.7.2006, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Цитата(GremlinProg @  24.7.2006,  11:21 Найти цитируемый пост)
тогда с такими подходами,

Какими подходами????
Если программисту не очевидно, что х&1 дают последний бит, то с ним в любом случае сработаться будет тяжело.
 


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
GremlinProg
Дата 24.7.2006, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 3
Всего: 106



Зри в корень! Отсюда все и начинается. Думаешь ты один такой? ) Наивный...

Оптимизация типа х&1 или (!(id+1)) и т.п. - это болезнь, от которой нужно поскорее избавляться, если ты хочешь прославиться программистом. Все через неё проходят, ты не первый. Возможно меня поддержат профессионалы, если увидят.

До сих пор вижу код, который нспещрен примочками типа встроенного ассемблера, сажусь разбирать - чушь полнейшая, которая либо заменяется парой строк на си, либо работает только при ограничениях на оптимизацию, (т.е. из за долбанного куска асма приходится отказываться от скорости исполнения остального кода). Раньше любой школьник, который хоть мало-мальски интересовался кодингом мог подглядеть, содрать, украсть очередную примочку и всем хвастаться: какой он молодец. Но этот бум давно прошел, сейчас рынок труда не терпит такого издевательства, такие грамотеи отсеиваются элементарной конкуренцией, а програмное обеспечение уже давно ушло за рамки асма, невозможно сейчас просто даже вручную посчитать элементарную програмку с использованием различных наворотов типа ASP, с импортом библиотек от различных производителей, даже если ты супер-пупер классно этот асм знаешь. Поэтому большое значение имеет компилятор, которым пользуется разработчик; насколько велики его возможности оптимизировать код; насколько перспективно его дальнейшее развитие в ногу со временем. Это все и даже больше имеет значение при разработке сегодняшнего софта. Я сделал свой выбор и не жалею.

А по поводу "очевидно", возможно, это простой пример, но когда сидишь дома, пытаешься разобраться в серьезном коде такие вот примочки тормозят процесс бывает на час-два, а то и день выпадает, например, ты используешь простую проверку на ноль, а число знаковое, оно пустое, но знак выставлен, вроде все нормально, но проверка не проходит, пока найдешь это место, потеряешь время, выясняется - просто програмер решил соптимизировать, он же не думал, что знак - тоже бит. Вот такие вот пироги бывают... Так что, зрите в корень! 


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
bel_nikita
Дата 24.7.2006, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



Цитата(GremlinProg @ 24.7.2006,  11:13)
...
заблуждаешься: код высокого уровня для того и нужен, чтобы абстрагировать задачу от конкретной её реализации на конкретном компиляторе, поэтому, если необходимо вычислить остаток, то и нужно писать (%), а не (&), а компилятор сам знает, что он должен сделать быстрее, а что - медленнее. Может быть это и прописные истины, но почему-то многие о них забывают.

Вот, сам же говоришь оптимизация второстепенный вопорос, ну так возьми пару компиляторов и посмотри на код по-дефолту:
Код
unsigned value = 100;
if ( value % 2 )
{
...
}

увидишь там операцию div smile  Компилятор сам ничего не знает, если не укажешь. Конечно, если пишешь под Вин калькулятор или тетрис, то можешь положиться на компилер и не знать, что у тебя творится в коде. Да и не нужно это все знать. Но когда начнешь писать, к примеру, драйвер какого-нибудь девайса, то поймешь что компилятор не панацея и не такой он "всезнающий". Весь код будет устлан вставками optimize: off/optimize: on

Цитата
Объяснил, почему для разработчика так важно знать, что действительно происходит в коде, т.е. что он имел ввиду, когда писал код. Если над проектом работает один программист, то, конечно, можно положиться на его память и надеяться на то, что через пару недель, месяцев, лет он таки вспомнит свои действия. Но, если над проектом работает несколько программистов, то бишь группа, тогда с такими подходами, как у sergej.z, сработаться им будет крайне сложно.

Если над проектом будут работать люди, которые задумываются над операциями &,|,%,  и при проверке целого на четность используют деление, то ни о каком срабатывании и речи быть не может. 


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Earnest
Дата 24.7.2006, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Так, налицо конфликт поколений  smile Может, хватит спорить?
Код типа x&1 - это не оптимизация, а привычка (со времен, когда компьютеры были большими и медленными, а компиляторы - не такими умными): думаешь "взять остаток от деления на 2", а руки сами пишут "&1". И чего ради перучиваться? Чтобы молодые "высокоуровневые" програмисты не напрягались? Так и им полезно знать кое-что о битах... В конце концов, дело вкуса.

А уж бездарный и излишне замудренный код можно написать и без всякого ассемблера. Сейчас это даже "проще", с шаблонами и TMP: смотришь битый час на код из полутора сотен шаблонных классов, пока поймешь, что аффтар просто излишне увлекается TMP.
 


--------------------
...
PM   Вверх
bel_nikita
Дата 24.7.2006, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



GremlinProg
Цитата
 когда сидишь дома, пытаешься разобраться в серьезном коде такие вот примочки тормозят процесс бывает на час-два, а то и день выпадает

Ну-уу, если тебя вводят вступор такие операции, как  х&1 или (!(id+1)), то что же ты пишешь? smile  

Это сообщение отредактировал(а) bel_nikita - 24.7.2006, 14:43


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
sergejzr
Дата 24.7.2006, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



GremlinProg, во первых на "ты" мы не переходили.

Во вторых если к этому делу уже серьёзно подходить, то правильно будет писать:

if is_even(x)
{
...
}

Поскольку оценивая операцию х%2 можно именно узнать, какому значению равен остаток от деления.
То что ответ 0 означает деление нацело - уже оптимизатия программиста (и по Вашей теории).
(как видим со всем можно перестарться)

Добавлено @ 14:46 
Вообще, всё зависит от определения.
Один определяет чётность отсутсвием остатка при делении на число 2, другой результатом булевой операции & переменной с числом 1.
Кто из этих двух больший проффессионал - на Вам судить.   


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
GremlinProg
Дата 24.7.2006, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 3
Всего: 106



Неохота спорить, да и не нужно  мне это.
По DDK - это вообще отдельная тема, зря ты её трогаешь, нет еще полноценного компилятора для разработки драйверов. Могу только посоветовать хорошую книжку Солдатова Программирование драйверов Windows. Изд. 2-е, перераб. и доп. — М.: ООО "Бином-Пресс", 2004 г. — 480 с: ил. Здесь он очень хорошо расписал, что можно, а что нельзя.
Цитата
которые задумываются над операциями &,|,%

Похоже ты не понял, о чем я говорил. 


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Nuzur
Дата 24.7.2006, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Млин, а создал то простую тему с простым вопросом, возникшем в результате торможения после тяжелого вечера!
Ну вы молодцЫ конечно, начали за здравие, закончили за упокой!

ЗЫ: если вам интерестно мое мнение, хоть я в етом я уже оч сильно сомневаюсь, так вот, если вам интерестно мое мнение - то

Код

if ( value % 2 )


намного красивше и читаеться с ходу, а вот вариант с & заставил на секундочку тормознуть smile
Может голосование устроим? 


--------------------
Never again...
PM MAIL   Вверх
GremlinProg
Дата 24.7.2006, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 3
Всего: 106



Earnest, похоже вы правы, согласен. Именно об этом я и говорю: время - деньги, но голова-то одна на плечах и она изредка раскалывается от излишней рьяности перспективных программистов доказать свою значимость, превосходство, показать как можно больше из того, что он знает. Это конечно не плохо, только девелопер не должен особо переживать по поводу подтверждения своей квалификации. Быть может дело в гармонах?

Добавлено @ 15:04 
Nuzur, программирование - это искусство, в нем тоже должна быть красота. 
Цитата

намного красивше и читаеться с ходу, а вот вариант с & заставил на секундочку тормознуть 

хоть кто-то понял, о чем я битый час говорю. Молодец, садись, пять, давай зачетку )  

Это сообщение отредактировал(а) GremlinProg - 24.7.2006, 15:08


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
bel_nikita
Дата 24.7.2006, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



Цитата(GremlinProg @ 24.7.2006,  13:48)
По DDK - это вообще отдельная тема, зря ты её трогаешь, нет еще полноценного компилятора для разработки драйверов. Могу только посоветовать хорошую книжку Солдатова Программирование драйверов Windows. Изд. 2-е, перераб. и доп. — М.: ООО "Бином-Пресс", 2004 г. — 480 с: ил. Здесь он очень хорошо расписал, что можно, а что нельзя.

 smile 

А я DDK и не трогаю. Причем тут DDK и книжка? smile  Профессионалы(про коих ты тут упомянул) пишут не только под Windows'ом и VC 7.1 smile  


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
GremlinProg
Дата 24.7.2006, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 3
Всего: 106



Профессия в первую очередь подтверждается временем, это я и имел в виду под словом "профессионал".

Цитата(bel_nikita @  24.7.2006,  17:08 Найти цитируемый пост)
А я DDK и не трогаю. Причем тут DDK и книжка?

похоже, ты вообще ни чего не трогаешь, только шум поднимаешь.

Цитата(bel_nikita @  24.7.2006,  17:08 Найти цитируемый пост)
не только под Windows'ом и VC 7.1

про это речи не было , а книжку я посоветовал потому, что в нех понятным языком разъяснены особенности разработки драйверов конкретно в VS и конкретно для Windows. По моему я ни кого не дезинформировал. 


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
ptr
Дата 24.7.2006, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 661
Регистрация: 31.5.2006
Где: Новосибирск

Репутация: 1
Всего: 14



Да господа, как сказал Nuzur, начали за здравие, а закончили за упокой. Вы здесь обсуждаете разные привычки написания кода. Кому-то проще и понятнее писать x&1, кому-то x%2. Не вижу смысла этого спора, всё равно все останутся при своём мнении.

Цитата(GremlinProg @  24.7.2006,  19:00 Найти цитируемый пост)
Nuzur, программирование - это искусство, в нем тоже должна быть красота. 

Красота дело относительное. Кому-то нравится больше x%2, кому-то x&1 smile . 


Код прежде всего должен быть понятным, а эффективность это дело тоже относительное smile . Иногда проще поставить рядом ещё один ящик и пусть себе считает. То, что сегодня  кажется медленным завтра уже может не иметь значения. Оптимизация (ручная) нужна там, где она действительно нужна  smile (системное программирование, математические расчёты или там где она важна для работы программы), а не где попало.      

Это сообщение отредактировал(а) ptr - 24.7.2006, 15:39


--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
Earnest
Дата 24.7.2006, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Цитата(ptr @  24.7.2006,  16:28 Найти цитируемый пост)
Иногда проще поставить рядом ещё один ящик и пусть себе считает.


Именно, ptr. Вот ведь нашли мировую проблему, о чем спорить, да еще и на личности переходить! 

GremlinProg, я понимаю, что ты хотел сказать: только ведь нет абсолютного критерия: что русскому красиво, то немцу смерть.
(Это я ни в коем случае не намекаю на место жительства sergej.z, просто пословица такая...  smile ) 
Т.е. один программист увидит трехэажный boost::bind и скажет "вау!", а другой скажет: "убить бы гада, который это написал". Да что там говорить: чужой код, в котором приходится разбираться, почти всегда раздражает: не алгоритмом, так именами, не именами так расстановкой скобочек... Не надо злится, надо просто сказать себе: "что же делать, не все же такие умные как я, пишут как могут, и на том спасибо..." smile  


--------------------
...
PM   Вверх
Nuzur
Дата 24.7.2006, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Модераторы перенесите тему в релизиозные войны пожалуйста smile 


--------------------
Never again...
PM MAIL   Вверх
sergejzr
Дата 24.7.2006, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Цитата(Earnest @  24.7.2006,  12:38 Найти цитируемый пост)
Так, налицо конфликт поколений  smile Может, хватит спорить?

Не вижу ничего плохого в спорах. На то он и форум. (Переубедите меня)
Вот пример, что можно вдоволь поспорить (к тому же "на религиозную тему"), каждому остаться при своём мнении абсолютно не переходя никакие рамки приличия и остаться друзьями.
http://forum.vingrad.ru/index.php?showtopic=35267

Цитата(Nuzur @  24.7.2006,  12:59 Найти цитируемый пост)
Ну вы молодцЫ конечно, начали за здравие, закончили за упокой!

Ну это уже жизнь и эволюция темы. Одному человеку она не подвластна smile .(Если за рамки приличия не выходит)
Узнал ответ на свой вопрос? Вот и отлично! А во что она превратится после этого - решают её участники.

 


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
GremlinProg
Дата 24.7.2006, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 3
Всего: 106



Earnest, согласен )
...тогда я из того числа, кто скажет
Цитата(Earnest @  24.7.2006,  17:43 Найти цитируемый пост)
"убить бы гада, который это написал"

разумеется, у stl смои минусы, но есть и плюсы, тем не менее.
Видишь, по большому счету не в красоте дело, поддержу ptr:
Цитата(ptr @  24.7.2006,  17:28 Найти цитируемый пост)
Оптимизация (ручная) нужна там, где она действительно нужна


разобрать код можно всегда, вопрос сходится только ко времени, которое приходится убивать на это неблагодарное дело. А вообще, в этом плане я не замечал у нас ни каких институтов: учат в основном как писать код, но совершенно не учат как правильно писать код. Вот буржуи - молодцы, они-то уже давно применяют стереотипы командной разработки. Вот, например Фредерик П.Брукс, со своим "Мифический человеко-месяц" какого года книжка, а сколько было споров по поводу статьи "Серебряной пули нет", и когда!!! 1987год. А сколько еще таких книг: "Экстремальное программиррование", "Рефакторинг"... И все это нацелено главным образом на то, чтобы можно было в конкретно детерминировать работу девелопера, и можно было его заменить или добавить в группу, дабы увеличить профессиональную мощь. Мало того, книгами и статьями дело не обошлось, написали не мало софта "для правильного программирования", те же Small Talk, но там жава. На других языках тоже какие-то есть. Бери, пользуйся. Сейчас и в россии тоже в плане софта есть разработки. Только в обучении специалистов дело похоже так и не движется. Печально. Ввели курсы по защите - круто, а что защищать, писать-то еще не научились. 


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Earnest
Дата 24.7.2006, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Цитата(sergej.z @  24.7.2006,  17:21 Найти цитируемый пост)
Не вижу ничего плохого в спорах. На то он и форум (Переубедите меня)

Не.. не возьмусь  smile Хотя насчет полезности таких споров - тоже вопрос спорный...
Ну разве что, если удовольствие от процесса получаешь... Только пусть некоторые (не будем говорить кто, хотя это был слоненок  smile ) спрячут зубы и когти, а то я прямо вижу эту бутылку, в которую они лезут...
Так что, если "в рамках приличий" и "остаться друзьями" - спорьте на здоровье.  smile 
 


--------------------
...
PM   Вверх
sergejzr
Дата 24.7.2006, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Полезность каждый определяет для себя smile Кто полезным не считает - не спорит. 


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
bel_nikita
Дата 24.7.2006, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



Кони люди смешались smile . DDK, STL, SmallTalk, Java, стили, асм, профессионализм и т.д.

Мне кажется,  что ответ дан исчерпывающий. Вопрос прозвучал: "Проверка на чётность, MS VC ++ 6.0". Приведены примеры и пояснения. Что касается быстродействия, так вот при использовании unsigned value % 2, этот самый шестой вставляет инструкцию div будь то релиз или дебаг.

З.Ы.: Что касается человеко-часов, то боже упаси работать с человеком стучащем без рабору по клаве и набирающем 5000 строк кода за 8 часов. Как правило, такой код восприимчив к окружающей среде и погоде smile  


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Earnest
Дата 24.7.2006, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Цитата(GremlinProg @  24.7.2006,  17:24 Найти цитируемый пост)
 Вот буржуи - молодцы, они-то уже давно применяют стереотипы командной разработки.

Ага, только код от этого у них лучше не становится. Да возьми хотя бы примеры с codeproject (ну не все подряд, конечно). Или какой-нибудь, не дай господи, код университетской разработки: просто поражаешься иногда контрасту между красотой и мощностью идеи, и убогостью реализации. Но за идею спасибо. А код мы и сами напишем, чего там. Наверное, это просто разными местами мозга делается.  smile 
Кстати, насчет стереотипов командной разработки: это только сверху, бантик в виде стандартизации описания и т.д. А внутри - дикие по величине кейсы и прочее. За "красоту" кода не платят, плятят за рабочую программу. 


--------------------
...
PM   Вверх
bel_nikita
Дата 24.7.2006, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



Цитата(Earnest @ 24.7.2006,  15:53)
За "красоту" кода не платят, плятят за рабочую программу.

Золотые слова! smile  + 


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Earnest
Дата 24.7.2006, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Цитата(sergej.z @  24.7.2006,  17:43 Найти цитируемый пост)
Кто полезным не считает - не спорит.

Точно, затягивает. Особенно когда перешли к битве за красоту - ну как тут удержаться smile 
Цитата(bel_nikita @  24.7.2006,  17:51 Найти цитируемый пост)
набирающем 5000 строк кода за 8 часов

Это можно сделать только применяя прогрессивный метод "копи-паст". Говорят, индусы так пишут. И ничего, весь мир у них отоваривается.  


--------------------
...
PM   Вверх
Mayk
Дата 24.7.2006, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


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

Репутация: 45
Всего: 134



Прежде чем пойдёт много буковок, напишу что в исходниках явы встречал компромисный вариант.
вот такой вот примерно
Код

int a = b & 1; // b % 2

 smile 





Цитата(sergej.z @  24.7.2006,  15:50 Найти цитируемый пост)
Точно так же х/2 компилеры оптимизуют в х>>1. 

Кстати Эти инструкции не эквивалентны. И они возвращают разный результат для отрицательных чисел.
Код

int main(){
 printf("%d\n", (-21)>>1); //-11
 printf("%d\n", (-21)/2); //-10
}






Цитата(sergej.z @  24.7.2006,  15:50 Найти цитируемый пост)
 (А многие так и делают), то провёл бы деление и взял остаток. 

Многие? Это большая часть из прошлого века вероятно.
Вот например есть файл
Код

int main(int argc){return argc % 2;}

И вот результат
bcc 5.5. Он не сделал div. 
icl 8.0. Он не сделал div. 
dmc 8.42. Он не сделал div. 
cl из VS2003. не сделал div. 
cl из VC7. не сделал div. 

флаги оптимизации не были выстановлены вообще. компиляторы - не из самых свежих и лучших, а итог... 0 компиляторов сделали деление для получения mod 2. 
(больше компиляторов под виндой у меня нет. 



Цитата(GremlinProg @  24.7.2006,  20:24 Найти цитируемый пост)
А вообще, в этом плане я не замечал у нас ни каких институтов: учат в основном как писать код, но совершенно не учат как правильно писать код. Вот буржуи - молодцы, они-то уже давно применяют стереотипы командной разработки. 

Брэк. Это уже совсем оффтопик.


  

Это сообщение отредактировал(а) Mayk - 24.7.2006, 17:12


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
GremlinProg
Дата 24.7.2006, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 3
Всего: 106



Цитата(Earnest @  24.7.2006,  18:53 Найти цитируемый пост)
Ага, только код от этого у них лучше не становится

Это уже зависит от мастерства.
Вот, например сайт цита http://citforum.iubip.ru/SE/project/, где одно время были предложены простые правила, на которые опирается сама идея экстремального программирования. Т.е. суть заключается именно в объектно-ориентированном подходе, а материал изложен очень просто: маленькими правилами, которые если даже просто интуитивно применять, приведут к упорядочиванию проекта, в целом, причем не конкретного, а любого проекта. Это наподобие того, что художником не обязательно рождаться, любого можно научить им быть. Сейчас уже не знаю, не заходил, но раньше там большой раздел был, были разделы паттерного программирования, отдельно расписан каждый паттерн и места, где его можно использовать, что-то типа stl, только не ограниченный фантазией самого девелопера.

Добавлено @ 17:27 
Mayk, отнюдь - это первые источники, которые я заметил, в которых явно демонстрируется то, что ты здесь правильно изложил, а по сути подтвердил:
Цитата
Оптимизация (ручная) нужна там, где она действительно нужна
 


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
bel_nikita
Дата 24.7.2006, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



Цитата(Mayk @ 24.7.2006,  16:11)
Вот например есть файл
Код

int main(int argc){return argc % 2;}

И вот результат
bcc 5.5. Он не сделал div. 
icl 8.0. Он не сделал div. 
dmc 8.42. Он не сделал div. 
cl из VS2003. не сделал div. 
cl из VC7. не сделал div. 

флаги оптимизации не были выстановлены вообще. компиляторы - не из самых свежих и лучших, а итог... 0 компиляторов сделали деление для получения mod 2. 
(больше компиляторов под виндой у меня нет.

Mayk, Ну, раз имеешь столько компиляторов под рукой smile , то, пожалуйста, попробуй вот, так :  int main(uinsigned int argc){return argc % 2;}. Думаю, что увидишь div smile 

Если не влом, еще, вот так, попробуй:
Код
bool odd(int value)
{
  return ( value % 2 );
}
bool odd_2(int value)
{
  return ( value & 1 );
}
int main(int argc,char* argv[])
{
  odd(argc);
  odd_2(argc);
  return 0;
}

 


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Mayk
Дата 24.7.2006, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


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

Репутация: 45
Всего: 134



Цитата(bel_nikita @  24.7.2006,  21:41 Найти цитируемый пост)
Mayk, Ну, раз имеешь столько компиляторов под рукой  , то, пожалуйста, попробуй вот, так :  int main(uinsigned int argc){return argc % 2;}. Думаю, что увидишь div


Не везде и не всегда, но здесь чуть хуже.

bcc и icl и dmc соптимизировали до and eax, 1  сразу же.

visual clы оконфузились. Правда /O2 и /O1 даже вправило им мозги на место, и в асме появился and eax, 1.


Цитата(bel_nikita @  24.7.2006,  21:41 Найти цитируемый пост)
Если не влом, еще, вот так, попробуй:

Здесь div появился только в visual c и ТОЛЬКО при /O1 (/О2 и без /O divов не было)

В аттаче сырцы(dmc пришлось пускать через дизасм. для того чтобы легко найти во всём листинге main(), в теле функции были введены константы типа 0x1234 )

Вывод. Оптимизаторы рулят.

ЗЫ. А вообще в современных условиях иногда можно не то что %2 писать, но даже по многу раз читать одни и те же файлы с винта - всё равно они кэшируются ОСей =) 

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  tests.rar.txt 67,61 Kb


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
ZeusAtVingrad
Дата 25.7.2006, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 12.4.2006

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



[QUOTE=sergej.z,21.7.2006,  17:42]
Цитата(ptr @  21.7.2006,  10:22 Найти цитируемый пост)


Цитата(ptr @  21.7.2006,  10:22 Найти цитируемый пост)
С двузначной логикой: true (1) и false (0). undefined и buss error не относятся к логике процессора.

Относятся конечно. На undefined он кладёт, но ошибки он должен логически обрабатывать(что будет, если на бусе одновременно 1 и 0 ?). Это же обыкновенный микрочип. Просто доступа к тий логике у программиста нет. Она на аппаратном уровне.

"3-е состояние" (высокоимпедансное) означает, что активные устройства (формирующие уровень сигнала на шине) от шины отключены. Какой электрический сигнал в это время будет а шине - одному аллаху известно, но если проц задумает его прочитать, то вполне себе получит какое-то случайное значение. А может быть и не случайное, а заранее определённое - в зависимости от типа логики.

Одновременно 0 и 1 - это вообще нонсенс какой-то. Как может быть одновременно 0.5В и 3В?
Кто-то всегда победит. У процессорных шин архитектуры IBM PC победит 0. Т.е. если одновременно два устройства выдадут на шину - одно 0, а другое 1, то получится 0 (электрически так получается).

Так что как-раз как "микрочип" процессор всегда считает с шины или 0 или 1.
Никакого 3-го состояния он не увидит.
И тем более "одновременно 0 и 1".

Добавлено @ 21:01 
Я тут немного в сторону скажу, ничего? smile
Цитата

Цитата

С двузначной логикой: true (1) и false (0). undefined и buss error не относятся к логике процессора. 

Относятся конечно. На undefined он кладёт, но ошибки он должен логически обрабатывать(что будет, если на бусе одновременно 1 и 0 ?). Это же обыкновенный микрочип. Просто доступа к тий логике у программиста нет. Она на аппаратном уровне.  


"3-е состояние" шины (высокоимпедансное) означает, что активные устройства (формирующие уровень сигнала на шине) от неё отключены. Какой электрический сигнал в это время будет на шине - одному аллаху известно, но если проц задумает его прочитать, то вполне себе получит какое-то случайное значение. А может быть и не случайное, а заранее определённое - в зависимости от типа логики.

Одновременные 0 и 1 - это вообще нонсенс какой-то. Как может быть одновременно 0.5В и 3В?
Кто-то всегда победит. У процессорных шин архитектуры IBM PC победит 0. Т.е. если одновременно два устройства выдадут на шину - одно 0, а другое 1, то получится 0 (электрически так получается).

Так что как-раз как "микрочип" процессор всегда считает с шины или 0 или 1.
Никакого 3-го состояния он не увидит.
И тем более "одновременно 0 и 1".
 
PM MAIL   Вверх
sergejzr
Дата 26.7.2006, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Цитата(ZeusAtVingrad @  25.7.2006,  18:50 Найти цитируемый пост)
Какой электрический сигнал в это время будет а шине - одному аллаху известно

Если бы микрочипы работали по принципу "одному аллаху известно" , вряд ли чтото путное получилось бы. Ошибки они очень часты и логикой значение (как Вы правильно сказали) должна быть определено. Поэтому просто  true/false  В некоторых случаях недостаточно. Поэтому появляются троичнай, четв, итд. логики. 
Цитата(ZeusAtVingrad @  25.7.2006,  18:50 Найти цитируемый пост)
Т.е. если одновременно два устройства выдадут на шину - одно 0, а другое 1, то получится 0 (электрически так получается).

Получается Bus Error. Включается высокоомное сопротивление. Во всяком случе процессор работать "не замечая" ошибки не будет.

Конечно процессор - более менее отполировання система. Но если Вам доводилось программить на VHDL  Вы понимаете, что послать на бус 1 и 0 одновременно особого труда не составляет и что система работать при этом не будет. И кстати как раз undefined при программировании FPGA учитывается.

 


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
ptr
Дата 26.7.2006, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 661
Регистрация: 31.5.2006
Где: Новосибирск

Репутация: 1
Всего: 14



Цитата(sergej.z @  26.7.2006,  16:36 Найти цитируемый пост)
Поэтому появляются троичнай, четв, итд. логики. 

Вообще же я имел ввиду процессоры, которые основаны не на классической двоичной булевой логике, а на троичной smile .

    

Это сообщение отредактировал(а) ptr - 26.7.2006, 13:17


--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
sergejzr
Дата 26.7.2006, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Ну вот например NULL Convention Logic использует троичную логику (NULL всегда побеждает).
Мы конечно немного о разных логиках говорим smile 


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
ptr
Дата 26.7.2006, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 661
Регистрация: 31.5.2006
Где: Новосибирск

Репутация: 1
Всего: 14



Цитата(sergej.z @  26.7.2006,  17:10 Найти цитируемый пост)
Мы конечно немного о разных логиках говорим smile  

Я это уже понял давно  smile  .

Цитата(sergej.z @  26.7.2006,  17:10 Найти цитируемый пост)
Ну вот например NULL Convention Logic использует троичную логику (NULL всегда побеждает).

NULL Convention Logic может быть и четырехзначной.  

Это сообщение отредактировал(а) ptr - 26.7.2006, 14:48


--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
ZeusAtVingrad
Дата 27.7.2006, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 12.4.2006

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



Цитата(ptr @  21.7.2006,  10:22 Найти цитируемый пост)

С двузначной логикой: true (1) и false (0). undefined и buss error не относятся к логике процессора.

Цитата(sergej.z @ 21.7.2006,  17:42)

Относятся конечно. На undefined он кладёт, но ошибки он должен логически обрабатывать(что будет, если на бусе одновременно 1 и 0 ?). Это же обыкновенный микрочип. Просто доступа к тий логике у программиста нет. Она на аппаратном уровне.

"Неопределённое" (высокоимпедансное) состояние шины означает, что устройство, которое может формировать сигнал, отключено от шины.
Но это не значит, что процессор, попытайся он прочитать шину, получит какое-то "неопределённое" значение. У него такое и сохранить-то негде! Он всегда прочитает или 0 или 1.
В архитектуре IBM PC, сдаётся мне, это будет 1, т.к. 0 там - отсутствие напряжения, а в высокоимпедансном состоянии потенциал на шине "подтягивается" резисторами к напряжению питания.

"Одновременный 0 и 1" - это вообще непонятно что. Как вы себе представляете одновременное наличие на проводе, например, 0.5 и 3.5 В?
Даже если два устройства попытаются выдать одновременно 0 или 1, процессор всё-равно прочитает что-то одно, даже если потенциал на шине будет какой-то неопределённый "посередине" между 0 и 1, а скорее всего, в зависимости от архитектуры, какое-то значение "победит": в архитектуре IBM PC "победит" 0.     

Это сообщение отредактировал(а) ZeusAtVingrad - 27.7.2006, 09:53
PM MAIL   Вверх
sergejzr
Дата 27.7.2006, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Имеется в виду не напряжение, а именно логика. То есть определение состояния при одновременном 0 и 1 (логических) сигналах. Что там за напряжение роли не играет. 


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
ZeusAtVingrad
Дата 28.7.2006, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 12.4.2006

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



В тех постах на которые я отвечал речь как-раз зашла уже о процессоре как чипе, об "аппаратной логике недоступной программисту".
А коли так, то и ответ я сформулировал в этом же ключе.

А откуда в процессоре берётся "одновременный 0 и 1"? Где он его "считывает"? Какой командой, в каком регистре? 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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