С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
По такой же таблице.
Страничка. Разрядность вроде как 6/+-7.
Страничка - это 16 КБ.
6 бит делимое, 7 бит со знаком делитель.
Результат 7 бит со знаком.
Оптимизировал свою программу вычисления периода косинуса. Удалось выиграть несколько байт кода. Теперь длина равна 54 байтам. Погрешность - такая же, как и у предыдущего варианта.
Привет!
Реализовал синус многочленом.
Вычисляется он на промежутке (0..PI/2), в остальные четверти копируется.
Коэффициенты подобрал методоми "научного тыка" и "искусственного отбора".
Получился такой алгоритм:
Тоесть, строго говоря, я считаю косинус, но в итоге получается синус.Код:HL=32737 BC=19 DE=5461 A=-20 FOR X=64 TO 0 STEP -1 SINTAB[X]=H A=A-2 DE=DE+A BC=BC-D HL=HL+BC NEXT X
Отклонение abs(SINTAB[X]-sin(X*PI/128)*127.5) не превышает 0.503. Это очень близко к идеальному 0.5
И итоговый код:
Это 55 байт кода.Код:sintabgen ld hl,sintab+#40 ld d,h ld e,l exx ld hl,32737 ld bc,19 ld de,5461 ld a,-20 EX AF,AF' loop ld a,h exx ld (hl),a ld (de),a inc e dec l jr z,cont exx ld a,c EX AF,AF' add a,-2 ld c,a add e jr c,$+3 dec d ld e,a ld a,c EX AF,AF' sub d jr nc,$+3 dec b ld c,a add hl,bc jr loop cont ld (hl),l loop2 xor a sbc a,(hl) ld (de),a inc l inc e jr nz,loop2
Понимаю, что не рекорд, но это другой вариант, а значит у него другой потенциал оптимизации.
Писал в эмуляторе EmuZWin. "Генетический алгоритм" на дельфе7.
Если кто захочет другую амплитуду или период - пишите, попробую подобрать коэффициенты. Прогу на дельфе не привожу, не из жадности а от стыда.![]()
Последний раз редактировалось Reobne; 26.11.2013 в 04:57.
А будет процедура расчета точки синуса из периода? Быстро, без таблиц
Вх. A=X [0..255]
Вых. А=Y (значение синуса)
Амплитуда и период должны меняться на входе в процедуру. Например задаются в HL.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)