Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 16:02

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 65 ]  На страницу 1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: маленькая такая задачка
СообщениеДобавлено: Пт сен 01, 2006 08:23 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
нужно получить только старший значащий бит числа. На спф.
У самого мысли крутятся вокруг 2* 2/ но ничего пока не получается 8( может будут какие идеи?


Последний раз редактировалось mOleg Чт мар 20, 2008 16:38, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт сен 01, 2006 08:45 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Код:
: Чего-То 32 0 DO DUP 2/ OR LOOP 1+ 2/ ;

проверять надоть...

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт сен 01, 2006 10:46 
Не в сети
Аватара пользователя

Зарегистрирован: Пт май 05, 2006 06:19
Сообщения: 192
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
теоритически мне видитса такая штука
разварачиваем число задом на пиред и ищем первый встречный труе с каждой неудачной папыткой отнимая 1 от счетчика
счетчик разумеетса битность слова
вот тока каманда вида
( 00000000000000000000010001000100 -- 00100010001000000000000000000000 )
мне неизвестна :)

_________________
SPF


Последний раз редактировалось mrack Пт сен 01, 2006 10:54, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт сен 01, 2006 10:51 
Не в сети

Зарегистрирован: Ср май 10, 2006 13:51
Сообщения: 202
Благодарил (а): 3 раз.
Поблагодарили: 4 раз.
Так старший значащий бит всегда 1! :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт сен 01, 2006 10:55 
Не в сети
Аватара пользователя

Зарегистрирован: Пт май 05, 2006 06:19
Сообщения: 192
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
и младши тоже первый ... парадокс ...

_________________
SPF


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт сен 01, 2006 10:57 
Не в сети

Зарегистрирован: Ср май 10, 2006 13:51
Сообщения: 202
Благодарил (а): 3 раз.
Поблагодарили: 4 раз.
mrack писал(а):
и младши тоже первый ... парадокс ...


не первый, а имеет значение "1"


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт сен 01, 2006 10:58 
Не в сети

Зарегистрирован: Ср май 10, 2006 13:51
Сообщения: 202
Благодарил (а): 3 раз.
Поблагодарили: 4 раз.
или надо найти номер первого значащего бита?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт сен 01, 2006 11:11 
Не в сети
Аватара пользователя

Зарегистрирован: Пт май 05, 2006 06:19
Сообщения: 192
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
а в тупую я решил так

: 2^ ( n -- 2^n )
2 SWAP 1 - 0 DO 2 * LOOP ;

: stb ( число - число, номер последнего значещего бита при отсчете с права на лево )
32 0
DO
DUP 31 I - 2^ /
IF 32 I - LEAVE THEN
LOOP ;

забыл сказать о недостатках, число анализируемое в stb должно быть не менее 4, так как иначе 2^1 вызовет зависание в слове 2^ :)

_________________
SPF


Последний раз редактировалось mrack Пт сен 01, 2006 11:40, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт сен 01, 2006 11:14 
Не в сети

Зарегистрирован: Ср май 10, 2006 13:51
Сообщения: 202
Благодарил (а): 3 раз.
Поблагодарили: 4 раз.
Вот накропал:

Код:
hex
: xx   dup 0= if exit then
  1F swap begin
     dup 80000000 and 0= while
     2* swap 1- swap
  repeat drop ;


старший бит - номер 31, младший - 0
Но конечно, лучше на ассемблере


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт сен 01, 2006 11:18 
Не в сети

Зарегистрирован: Ср май 10, 2006 13:51
Сообщения: 202
Благодарил (а): 3 раз.
Поблагодарили: 4 раз.
mrack писал(а):
а в тупую я решил так

: stb ( число - номер последнего значещего бита при отсчете с права на лево )

Надо найти номер старшего значащего бита, то есть слева направо!


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт сен 01, 2006 11:22 
Не в сети
Аватара пользователя

Зарегистрирован: Пт май 05, 2006 06:19
Сообщения: 192
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
так блин
2^31 .... 2^0 - вот так я считаю :)
или
2^0 ... 2^31 - воттак видимо вы :)
или
2^31 - это младший бит ?
или ники в поле форума пишутса справа
или я опять гдето не прав

_________________
SPF


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт сен 01, 2006 11:39 
Не в сети

Зарегистрирован: Ср май 10, 2006 13:51
Сообщения: 202
Благодарил (а): 3 раз.
Поблагодарили: 4 раз.
mrack писал(а):
так блин

2^31 .... 2^0 - вот так я считаю


я что-то стормозил :oops:

но мое решение таки правильное :D
и быстрое


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт сен 01, 2006 11:43 
Не в сети
Аватара пользователя

Зарегистрирован: Пт май 05, 2006 06:19
Сообщения: 192
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
главное не показывайте ветвь mOleg а то закритикует использование дулупа :)

_________________
SPF


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт сен 01, 2006 11:45 
Не в сети

Зарегистрирован: Ср май 10, 2006 13:51
Сообщения: 202
Благодарил (а): 3 раз.
Поблагодарили: 4 раз.
да можно и DO-LOOP, просто степень двойки каждый раз вычислять медленно


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт сен 01, 2006 17:01 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
[quote="oco"]Вот накропал:

Код:
hex
: xx   dup 0= if exit then
  1F swap begin
     dup 80000000 and 0= while
     2* swap 1- swap
  repeat drop ;

Код:
80000000 and 0=
можно заменить на 0>

Можно поменять направление
Код:
: LOG2_1
  dup 0= if exit then
  -1 swap begin
     dup while
     u2/ swap 1+ swap
  repeat drop ;


Будет независимость от разрядности

Можно использовать рекурсию
Код:
: +LOG2_1-  ( n n1 -- log2{n1}+n-1 )
          dup if u2/ recurse 1+ exit then drop ;

: LOG2_1 dup if -1 swap +LOG2_1- then ;


: U2/ 1 RSHIFT ;


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 65 ]  На страницу 1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB