коллеги содрогнитесь :)
От: Кодт Россия  
Дата: 16.01.10 23:52
Оценка: 90 (15) :))
http://steike.com/code/useless/evil-c/
Перекуём баги на фичи!
Re: коллеги содрогнитесь :)
От: vadimcher  
Дата: 17.01.10 01:53
Оценка: 44 (3) +1
Здравствуйте, Кодт, Вы писали:

К>http://steike.com/code/useless/evil-c/


Обратный корень -- это "баян" столетней давности, который не только работает, но и очень хорошо работает. Про него можно и в википедии почитать (с выводом): http://en.wikipedia.org/wiki/Fast_inverse_square_root.

Понравилось это:
while (counter --> 0) { ... }

А вот зайца кому, зайца-выбегайца?!
Re[2]: коллеги содрогнитесь :)
От: Воронков Василий Россия  
Дата: 17.01.10 02:12
Оценка: +4 :)
Здравствуйте, vadimcher, Вы писали:

В моем рейтинге приз получает:

Optimization, the Microsoft way

__inline BOOL
SearchOneDirectory(
                  IN  LPSTR Directory,
                  IN  LPSTR FileToFind,
                  IN  LPSTR SourceFullName,
                  IN  LPSTR SourceFilePart,
                  OUT PBOOL FoundInTree
                  )
{
    //
    // This was way too slow. Just say we didn't find the file.
    //
    *FoundInTree = FALSE;
    return(TRUE);
}


Re: коллеги содрогнитесь :)
От: IROV..  
Дата: 17.01.10 12:04
Оценка:
Здравствуйте, Кодт, Вы писали:

К>http://steike.com/code/useless/evil-c/


Node *left, *right;
int childCount() {
return !!left + !!right;
}

А что за Node? и по какому принцыпу работает?
я не волшебник, я только учусь!
Re[2]: коллеги содрогнитесь :)
От: Кодт Россия  
Дата: 17.01.10 12:33
Оценка: +1
Здравствуйте, IROV.., Вы писали:

IRO>А что за Node? и по какому принцыпу работает?

class TreeNode
{
  .....
  TreeNode *left;
  TreeNode *right;
  .....
  int count_direct_children() const { return (left ? 1 : 0) + (right ? 1 : 0); }
};

Так понятнее?
Перекуём баги на фичи!
Re[3]: коллеги содрогнитесь :)
От: IROV..  
Дата: 17.01.10 19:21
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, IROV.., Вы писали:


IRO>>А что за Node? и по какому принцыпу работает?

К>
К>class TreeNode
К>{
К>  .....
К>  TreeNode *left;
К>  TreeNode *right;
К>  .....
К>  int count_direct_children() const { return (left ? 1 : 0) + (right ? 1 : 0); }
К>};
К>

К>Так понятнее?
ну сам прием (!!x) я знал, не знал что нужна такая функция

а нужен этот прием я так понял, что бы избегать if которые в процессоре совсем не быстрые?
я не волшебник, я только учусь!
Re: коллеги содрогнитесь :)
От: std.denis Россия  
Дата: 17.01.10 20:25
Оценка:
а в чем сила "Lispy with-foo-bound-to" ?
Re[2]: коллеги содрогнитесь :)
От: vadimcher  
Дата: 17.01.10 20:29
Оценка:
Здравствуйте, std.denis, Вы писали:

SD>а в чем сила "Lispy with-foo-bound-to" ?


Видимо в том, что можно писать parent.

А вот зайца кому, зайца-выбегайца?!
Re[4]: коллеги содрогнитесь :)
От: Кодт Россия  
Дата: 17.01.10 21:47
Оценка:
Здравствуйте, IROV.., Вы писали:

IRO>ну сам прием (!!x) я знал, не знал что нужна такая функция

Очень симпатичная функция, я считаю!

IRO>а нужен этот прием я так понял, что бы избегать if которые в процессоре совсем не быстрые?

Логические ! и !! ничем по сути не отличаются от if (являются его частным случаем). Дальше всё зависит от архитектуры процессора и фантазии компилятора.
Перекуём баги на фичи!
Re[3]: коллеги содрогнитесь :)
От: Кодт Россия  
Дата: 17.01.10 21:59
Оценка:
Здравствуйте, vadimcher, Вы писали:

SD>>а в чем сила "Lispy with-foo-bound-to" ?

V>Видимо в том, что можно писать parent.

Можно было и без for,
{
  int parent = 123;
  {
    int t = parent, parent = 456;
    {
      int t = parent, parent = 789;
      {
        .....
      }
    }
  }
}
// против
{
  int parent = 123;
  for(int t = parent, parent = 456; t; t=0)
  {
    for(int t = parent, parent = 789; t; t=0)
    {
      .....
    }
  }
}

Но с for — получаем нужный синтаксический сахар.
Перекуём баги на фичи!
Re: коллеги содрогнитесь :)
От: Lloyd Россия  
Дата: 18.01.10 09:31
Оценка:
Здравствуйте, Кодт, Вы писали:

К>http://steike.com/code/useless/evil-c/


cast-to-bool недоавно пробегал в форуме web, вопрос про javascript.
Re[4]: коллеги содрогнитесь :)
От: std.denis Россия  
Дата: 18.01.10 09:39
Оценка:
Здравствуйте, Кодт, Вы писали:
К>Можно было и без for,
K>...
К>Но с for — получаем нужный синтаксический сахар.
Я может что-то упустил, но внутри блока within всегда будет __t == parent. Разве нет?
В противовес Вашим примерам, хотя в них parent будет указывать вроде как на текущий "элемент", а t на родительский но хотя бы на разные
Re[5]: коллеги содрогнитесь :)
От: Кодт Россия  
Дата: 18.01.10 10:47
Оценка:
Здравствуйте, std.denis, Вы писали:

SD>Я может что-то упустил, но внутри блока within всегда будет __t == parent. Разве нет?

SD>В противовес Вашим примерам, хотя в них parent будет указывать вроде как на текущий "элемент", а t на родительский но хотя бы на разные

Ну, в общем, да — я у себя немножко поэкспериментировал с разными способами применения — и случайно опубликовал промежуточный. Невнимателен-с...
При известной ловкости можно сделать стек: в самом вложенном блоке иметь отсылки к более внешним переменным.
int super2 = 1;
int super = 2;
int here = 3;
{
  int
    super2=super, // 2
    super=here, // 3
    here=super*super2; // 2*3=6
  {
    int super2=super, super=here, here=super+super2; // 3, 6, 3+6=9
    .....
  }
}
Перекуём баги на фичи!
Re: коллеги содрогнитесь :)
От: R.O. Prokopiev Россия http://127.0.0.1/
Дата: 18.01.10 11:21
Оценка:
Здравствуйте, Кодт, Вы писали:

К>http://steike.com/code/useless/evil-c/


Применял следующие:


Про некоторые не знал...
Re[2]: коллеги содрогнитесь :)
От: Кодт Россия  
Дата: 18.01.10 17:38
Оценка: +2
Здравствуйте, R.O. Prokopiev, Вы писали:

ROP>Применял следующие:

ROP>[] is symmetric

Зачем?!
Перекуём баги на фичи!
Re[2]: коллеги содрогнитесь :)
От: ononim  
Дата: 19.01.10 08:44
Оценка:
ROP>Применял следующие:

ROP>

ROP>Про некоторые не знал...

А смысл?
Я применял "Duff's Device for loop unrolling" в функции преобразующей регистр строк. Реально ускорило работу на 30% под P4/VC8 (speed optimization release). Применял и "Struct/class offsets" — не неявно, через макрос MSSDK FIELD_OFFSET. Пользу от применения cast-to-bool тоже еще могу понять.
А что дает i[a] кроме удивления нубов?
Как много веселых ребят, и все делают велосипед...
Re[3]: коллеги содрогнитесь :)
От: Alexander G Украина  
Дата: 19.01.10 08:56
Оценка:
Здравствуйте, ononim, Вы писали:

O> Применял и "Struct/class offsets" — не неявно, через макрос MSSDK FIELD_OFFSET.

Забавно: явное применение этого по стандарту нелегально, легально через макро offsetof, которое, как там отмечено, обычно сделано именно так.

O> Пользу от применения cast-to-bool тоже еще могу понять.

Самый короткий способ способ избежать дурацкого ворнинга MSVC.
  BOOL B = GetB();
  bool b1 = B; //  warning C4800: 'BOOL' : forcing value to bool 'true' or 'false' (performance warning)
  bool b2 = B == TRUE; // неправильно
  bool b3 = B != FALSE; // правильно, но много букв
  bool b4 = !!B; // правильно и коротко


O>А что дает i[a] кроме удивления нубов?

+
Русский военный корабль идёт ко дну!
Re: коллеги содрогнитесь :)
От: Alexander G Украина  
Дата: 19.01.10 09:07
Оценка:
Здравствуйте, Кодт, Вы писали:

К>http://steike.com/code/useless/evil-c/


Осознал "Endian magic".
Это правда, что IEEE binary representation завивит от эндиановости?
Также, неужели у кого-то нет long long ?
Русский военный корабль идёт ко дну!
Re[3]: коллеги содрогнитесь :)
От: R.O. Prokopiev Россия http://127.0.0.1/
Дата: 19.01.10 12:58
Оценка: :)
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, R.O. Prokopiev, Вы писали:
ROP>>Применял следующие:
ROP>>[] is symmetric
К>Зачем?!
Элементарно. Индексное выражение простое, а "указательное" — сложное, с C-кастами.
Например, i[(A *)b] вместо ((A *)b)[i].

ЗЫ. Про ключевые слова *_cast знаю
Re[3]: коллеги содрогнитесь :)
От: ononim  
Дата: 19.01.10 13:01
Оценка: 1 (1)
ROP>>Применял следующие:
ROP>>[] is symmetric
К>Зачем?!
на самом деле этим можно так сказать ensure, что массив — это и в самом деле массив, а не нечто с operator[]
Как много веселых ребят, и все делают велосипед...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.