· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.A&O —› Микроупражнение: числа Фибоначчи

<< . 1 . 2 .

Посл.отвђт Сообщенiе


Дата: Июн 15, 2004 21:16:39

vaskovich
А что значит то 9 байт.. иначе 10?
Каждый будет понимать как хочет, иначе, например, если там лежить не 0 а 117 то вообще ничего неполучится.
Как понимать то? Что ты однобайтовой инструкцией туда (в edi - 4) её поместишь? Или что?


Дата: Июн 15, 2004 21:37:37

ozzman
Ох-ох, запутался я совсем.. :( Протрейсил все до конца, ничего странного и неправильного не увидел.

The Svin
Да, твоя правда. Это мои проблемы с русским языком. Просто изначально у меня еще был другой код на 10 байт
    mov   edi,addr    ; 5
    sub   eax,eax     ; 2
    cld               ; 1
    stosd             ; 1
    inc   eax         ; 1
@@: stosd             ; 1
    add   eax,[edi-8] ; 3
    jnc   @b          ; 2

10 байт всмысле без учета загрузки адреса и cld.

если там лежить не 0 а 117 то вообще ничего неполучится.
Вот именно. Если бы мы могли дать гарантию, что там всегда лежит ноль, то можно было б использовать мой первый вариант, а оказывается гарантий у нас никаких.


Дата: Июн 16, 2004 03:43:25 · Поправил: S_T_A_S_

    The Svin
  • xadd эвкиваленто будет по функцианальности и размеру паре команд add и xchg ты сам то что предпочтёшь написать в программе?
Ессно XADD, на K7 это быстрее, хотя для PIV XADD не указано, как всегда :(

    captain cobalt
  • Нельзя предполагать, что кто-то ..... установит подходящее значение флага направления.
Как же так? Ведь Direction Flag сбрасывается по Reset'у :).


Ну ладно, на загрузку адреса и сброс флага как ни крути, уйдёт 6 байт. (хотя, как представлен адрес не сказано)
Далее, Jcc - ещё 2 байта.
Получение чисел F0 и F1, похоже, меньше 4х байтов не сделать.
Собственно, операции вычисления и заполнения массива - 4 байта:
Байт на запись, и 3 на сложение - меньше как сделать?
Если использовать регистр, то нужна команда обмена, если [EDI], то появляется байт disp8.
Итого 16 байт. Что тут можно уменьшить-то?

Можно заменить EDI на ESP, тогда мы избавимся от CLD.
Но стек движется в сторону уменьшения адресов, что не соответствует условию..


Возможно, задача предполагает использовать рекурсию или формулу Бине для вычисления, но inho всё это отрицательно скажется на размере. Вывод - captain cobalt опять что-то скрывает ? :).


Дата: Июн 16, 2004 03:48:13

формулу Бине для вычисления

Ух ты. А это что за зверь?


Дата: Июн 16, 2004 03:55:42 · Поправил: S_T_A_S_

Fn=(((Ö5+1)/2)n-((1-Ö5)/2)n)/Ö5

Fn=(((sqr(5)+1)/2)n-((1-sqr(5))/2)n)/sqr(5)

Fn=((Ö5/2+0.5)n-(0.5-Ö5/2)n)/Ö5

ЗЫ
Запутаться можно в скобочках, надеюсь, хоть где-то правильно =)


Дата: Июн 16, 2004 18:01:50

Золотое сечение? Выглядит похоже...


Дата: Июн 16, 2004 19:29:06

Вот блин! Где-то у меня валялся совершенно дзенский алгоритм для поиска чисел Фибоначчи на замечательном и прогрессивном языке - прологе. Но, к сожалению, я никак не могу его отыскать.. :(((


Дата: Июн 17, 2004 08:10:47 · Поправил: S_T_A_S_

Золотое сечение вроде бы так:

x/(R-x)=R/x

x2+R*x-R2=0

окуда: x=R*(Ö5-1)/2

x=R*Ö5/2-0.5


Дата: Июн 17, 2004 08:17:23

Вот ещё про числа Фибоначчи:

черенки деревьев примыкают к стеблю по спирали, которая проходит между двумя соседними листьями:
1/3 полного обороьта у орешника
2/5 - у дуба
3/8 - у тополя
5/13 - у ивы.

Хотя это мало помогает при решении Микроупражнения %)


Дата: Июн 17, 2004 22:30:41

S_T_A_S_
Никак нет, именно это имеет значимую роль в решении, ща в лес с рулеткой и ноутом пойду, там все и соберу :-)


Дата: Авг 19, 2004 14:18:26 · Поправил: Daniil

Когда учился в школе вывел вот такую формулу.
Вроде как она приближённая, но начиная с какого индекса начаинает говорить неправду - не знаю, так как тестил только на МК-52. :)

Fn = [ Фn-1*(1-1/(Ф+2)) ],
где Ф=(sqrt(5)+1)/2 (золотое сечение).
Квадратные скобки - округление (т.е. round, а не int).

Можно записать по другому
Ф=(sqrt(5)+1)/2 ;золотое сечение
Q=1-1/(F+2) ;спец-коэффициент, подобран опытным путём и интуицией
Fn = [ Фn-1 ]*Q


Дата: Авг 19, 2004 14:22:36

S_T_A_S_
„окуда: x=R*(Ö5-1)/2 “

Не совсем.
Уравнение квадратное - имеет два решения.

0,6180339887 и 1,6180339887

Отличаются они на единицу и являются обратными друг другу.

<< . 1 . 2 .


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.063