User Tag List

Показано с 1 по 10 из 1128

Тема: ЭТЮДЫ

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #11

    Регистрация
    15.01.2005
    Сообщений
    201
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    надо что-то такое мутить:

    if b=64 then exit ;a=a*64/64

    a*b/64 = ( (a+b)^2 - a^2 - b^2 ) / 2 / 64 = (a+b)^2 / 64 - a^2 / 64 - b^2 /64 + rra

    need table x^2/64 (x=0..126) или возможно x^2/32 + rra:srl a

    ...или можь вообще так:
    ;(a+b)^2 - (a-b)^2 = a^2 + b^2 + 2*a*b - a^2 - b^2 + 2*a*b = 4*a*b

    a*b/64 = ( (a+b)^2 - (a-b)^2 ) / 4 / 64 = ( (a+b)^2 / 128 - (a-b)^2 / 128 ) + rra

    (используется предрасчитанная табличка x^2 / 128 )

    ...или вообще
    a*b/64 = ( (a+b)^2 - (a-b)^2 ) посчитали в HL (двумя взятиями из таблицы) и старший байт забрали в A (это и есть / 4 / 64)
    (используется предрасчитанная табличка x^2)

    Код:
    ;
    ;mul_ac4:
    ;hl = (a+c)^2 - (a-c)^2 = a*c*4
    	ld	h,sqr_tbl/256
    	sub	c
    	ld	l,a
    	add	a,c
    	add	a,c
    	ld	c,(hl)
    	inc	h
    	ld	b,(hl)
    	ld	l,a
    	ld	a,(hl)
    	dec	h
    	ld	l,(hl)
    	ld	h,a
    	sbc	hl,bc
    ;/mul_ac4
    
    	ld	a,h	;a = a*c*4/256 = a*c/64
    ...и как вариант возможной дальнейшей оптимизации, из таблицы не по 2 байта брать (16битное вычитание), а вначале по младшим байтам решение вынести - повлияют ли они на старшие (перенос), и уж потом из таблицы брать и вычитать старшие, с учетом переноса или его отсутствия

    Код:
    ;a = a*c/64 = ( (a+c)^2 - (a-c)^2 ) / 256
    	ld	h,sqr_tbl/256
    	sub	c
    	ld	l,a
    	ld	b,(hl)
    	add	a,c
    	add	a,c
    	ld	c,l
    	ld	l,a
    	ld	a,(hl)
    	sub	b
    	inc	h
    	ld	a,(hl)
    	ld	l,c
    	sbc	a,(hl)
    [при заполнении 512b sqr_tbl таблицы квадратов не забыть квадраты для отрицательных чисел]


    - - - Добавлено - - -

    получить N*4/3. Есть мысли?
    взять стандартную процедуру побитного деления и раскрыть-расписать, учитывая, что делитель в данном конкретном случае - это просто два включенных бита / две ветки переходов, с невключенными остальными / пустыми ветками
    3 = %00000011
    Последний раз редактировалось char; 10.10.2018 в 23:13.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Этюды: как бы написать поизящнее.
    от AndTorp в разделе Программирование
    Ответов: 5
    Последнее: 17.03.2008, 00:43
  2. Ответов: 0
    Последнее: 18.08.2006, 22:40
  3. Этюды: печать шрифтом 5x5...
    от breeze в разделе Программирование
    Ответов: 12
    Последнее: 27.03.2005, 05:21

Метки этой темы

Ваши права

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