Математика и алгоритмы: различия между версиями

Материал из support.qbpro.ru
imported>Supportadmin
Нет описания правки
imported>Supportadmin
Нет описания правки
Строка 1: Строка 1:
[[Побитовые операции]]
*[[Побитовые операции]]
[[Битовые хаки]]
*[[Битовые хаки]]
*[http://ru.wikipedia.org/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4_(%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%B0) Дополнительный код (представление числа)]
==Ссылки==
==Ссылки==
*http://algolist.manual.ru/ ,http://algolist.manual.ru/misc/morfo.php
*http://algolist.manual.ru/ ,http://algolist.manual.ru/misc/morfo.php

Версия от 15:17, 5 августа 2013

Ссылки

Морфологический анализ

Хэш-функция для целых чисел

В одно время, очень нужна была хорошая и быстрая хэш-функция для целых чисел. И случайно, в исходниках Blender`а, нашел:

int hash_func_int( int data ) {

   int key;
   
   
   key = data;
   
   key += ~(key << 16);
   key ^=  (key >>  5);
   key +=  (key <<  3);
   key ^=  (key >> 13);
   key += ~(key <<  9);
   key ^=  (key >> 17);
   
   return key;

}

Необычное использование побитового XOR в Javascript

источник

Отлаживая недавно очередной кусок чужого кода наткнулся на такой цикл:

while (--i ^ -1)  /* тело цикла */;


при этом, изначально i равно некоторому положительному числу. То есть, побитовый оператор используется здесь для целых чисел. Немного подумав, я понял, что результат побитового XOR обратится в нуль единственно в случае, когда числа равны. Тогда условие кастуется в true. В противном случае, будет не-ноль, что кастуется в false.

Получается, можно использовать побитовый XOR вместо оператора != (если мы заранее знаем, что сравниваемые величины суть числа).

Оказалось, что если использовать побитовый XOR вместо !=, появляется прирост в производительности (по крайней мере на Firefox), этот прирост стабильный (то есть он есть всегда, то больше, то меньше), но составляет всего лишь около 1%.