быстрое вычисление целочисленного логарифма

Aug 29, 2010 07:32

В любом современном языке программирования во время преобразование целого типа в натуральный происходит преобразование в формат IEEE 754, со всеми вытекающими отсюда обстоятельствами.

int i = 10; <- 4 байта в двоичном формате целого числа
float f = i; <- 4 байта в формате IEEE 754 ( Read more... )

танцы с бубном

Leave a comment

Comments 3

bubukec August 29 2010, 20:44:14 UTC
Выполняется быстрее, потому что сопроцессор.
float fValue = lValue; // Инструкция FILD для загрузки lValue (1 такт)
long e = (((*(long*)(&fValue )) & 0x7F800000) >> 23) - 127; // взять адрес, логическое И, сдвиг, вычитание - 4 такта

Итого: 5

То, что по ссылке с хабра, будет работать быстрее только когда срабатывает только первое сравнение. В среднем это действительно будет где-то в три раза медленне. В худшем - мммм... раз так в 12.

Reply

eurolexa August 30 2010, 08:35:01 UTC
Ну да, так и есть. Жалко что в языках типа Эшн Скрипта или Явы, доступ к битам переменных с плавающей точкой закрыт.
Мне кажется это преобразование можно было бы успешно в разных задачах применять, так сказать потенциал у него есть)

Reply


bubukec August 29 2010, 20:52:31 UTC
блин, побитовое.

Reply


Leave a comment

Up