|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Апр 16, 2004 11:34:12 · Поправил: RobinFood Держите первый вариант решения второй задачи. xor ecx,ecx inc ecx _loop1: cmp eax,ecx je _yes lea ecx,[ecx+ecx*2] cmp ecx,6F7C52B3 ; =3^21-2^33 (3^20<2^32) jnz _loop1 _no: |
|
|
Дата: Апр 16, 2004 11:37:42 RobinFood [ его вариант почему-то уверен, что 0 - это степень двойки... ] В условии задачи написано натуральное число. |
|
|
Дата: Апр 16, 2004 11:45:51 Тогда зачем там уточнение, что оно беззнаковое? |
|
|
Дата: Апр 16, 2004 13:11:49 RobinFood Очевидно, для того, что в случае равенства старшего бита единице число все равно остается натуральным 8-) |
|
|
Дата: Апр 16, 2004 19:29:50 Угу, решил... и его вариант почему-то уверен, что 0 - это степень двойки... Тю, а что тебе мешает добавить еще и проверку на ноль? |
|
|
Дата: Апр 17, 2004 02:18:49
@@: mov edx, AAAAAAABh
mul edx
or eax, eax
js .no
shr edx, 1
mov eax, edx
jc .no
jnz @@
.yes:
|
|
|
Дата: Апр 17, 2004 03:03:57 |
|
|
Дата: Апр 17, 2004 06:40:39 · Поправил: S_T_A_S_ Так по-меньше: @@: mov edx, AAAAAAABh mul edx sbb edx, eax jz .yes test edx, eax jz @@ .no: |
|
|
Дата: Апр 17, 2004 14:50:10 Извиняюсь, но что если просто развернуть цикл? Каков выигрыш в скорости получим тогда? И сделать вообще без каких-либо JMP... Только не бейте меня по голове! :) |
|
|
Дата: Апр 18, 2004 03:47:10 ни хера себе |
|
|
Дата: Апр 18, 2004 14:25:33 · Поправил: S_T_A_S_ [ Eduard_x : что если просто развернуть цикл? Каков выигрыш в скорости получим тогда? ] 66% возможных EAX отбрасываются сразу же, т.е. jz @@ не выполняется. На 2м проходе - еще 66% и т.д. Принцип простой - делим на 3, если без остатка, то повторяем - а это не так часто будет. Макс. кол-во проходов цикла - при 320 Как сделать без каких-либо JMP я не знаю :( Надо ждать людей понимающих в математике.. ЗЫ Чтобы с 0й степеню тоже работал алгоритм, надо добавить jnc .yes после mul edx ЗЫЫ sla, я подумал некоторое время, но ничего не понял =) |
|
|
Дата: Апр 19, 2004 07:47:59 Гы. cmp eax,80000000h jz yes cmp eax,40000000h jz yes ... cmp eax,1 jz yes jmp no :))) |
|
|
Дата: Апр 19, 2004 11:10:46 · Поправил: Asterix . |
|
|
Дата: Апр 19, 2004 12:21:53 · Поправил: Eduard_x Sharp это неоригинально. я ж накалякал - без JMP. К тому же ты подгружаешь каждый раз число вместо простого сдвига. Думал про bsf / bsr, но действительно, Володин вариант наибыстрый. :) |
|
|
Дата: Апр 19, 2004 12:34:53 Sharp & Eduard_x Вы топик с начала читали? Степень двойки уже нашли. Причем более эффективным способом, чем предложенные вами. Теперь ищем степень тройки ЗЫ bsf / bsr очень медленные инструкции. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.076 |