С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
По-ходу в программе глюк.
M1: LD L,H
LD H,127
LD H,(HL)
LD L,A
ADD A,(HL)
RET
К момену прихода на метку М1, в аккумуляторе находится значение H.
Ага. Он-же отгружается в L. Потом H дважды меняется и в L кладется A. КОТОРОЕ = БЫВШЕМУ H, И КОТОРОЕ УЖЕ ТАМ!
К тому-же непонятно зачем заводить четыре таблицы по 256, если в каждую попадаем только при определённом значении H, и следовательно только в один диапазон. Т.е. можно было-бы обойтись одной (это если принимать процедуру как правильную).
Так что по-ходу что-то тут недописано...
есть вероятность пропущенной команды
но я хзM1:
ld a,l
LD L,H
LD H,127
LD H,(HL)
LD L,A
ld a,(hl)
; ADD A,(HL)
RET
одной обойтись нельзя
как должна выглядеть таблица извлечения корней от 0 до 255
0 1 1 1 2 2 2 2 2 3 3 3 3 3 3 3 4
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
и тут уже надо смотреть как ты будешь округлять
кстати для этого у него и ADD A,(HL) чтобы хоть както скомпенсировать преобразование 16 бит в 8 бит (ну я так предпологаю)
Последний раз редактировалось jerri; 23.03.2012 в 09:21.
С уважением,
Jerri / Red Triangle.
а вот и автор
Мой E-Mail: devils@ellink.ru
---------- Post added at 11:55 ---------- Previous post was at 11:53 ----------
на основе вот этого можно анализировать
1. Тоpмоз которого никто не видел !
LD DE,1 ; 10 : 3
XOR A ; 4 : 1
M1: SBC HL,DE ; 15 : 2
RET C ; 11/5 : 1
INC DE ; 6 : 1
INC DE ; 6 : 1
INC A ; 4 : 1
JR M1 ; 12 : 2
---------------------
12 байт.
Мин. вpемя = 14 + 26 = 40 тактов
Макс.вpемя = 14 + 255 * 48 = 12254 такта.
Hу, скажем так, - это pаботает основываясь на том, что количес-
тво ответов с каждым следующим целым ответом возpастает на 2.
Hаписана мною впеpвые была в 1994 году.
С уважением,
Jerri / Red Triangle.
В программе явно глюки. Я обнаружил то же самое, что Destr. К тому же, неверны данные об адресе начала таблицы. При значениях аргумента >4096 регистр H Загружается число 7F, а потом идет считывание из HL. То есть идет считывание по адресам меньшим, чем 32768.
Еще можно заметить, что если значение аргумента >4096 - То его младший байт вообще не используется. Используется только старший байт. Я распечатал квадраты всех чисел от 0 до FF. В распечатке видно, что при значениях квадрата x>4096, одному и тому же значению старшего байта x соответствует не более двух различных значений sqrt(x). Поэтому и без всякой интерполяции, если брать значение sqrt(x) из таблицы только по старшему байту для x>4096 - то найденное таким образом приближение будет отличаться от истинного sqrt(x) не более чем на единицу. Размер таблицы составит таким образом 4096+256 байт.
Еще можно вычислять квадратный корень по таблице квадратов целых чисел. Методом двоичного поиска ищется местоположение x в этой таблице - это местоположение и будет искомым sqrt(x). Для двоичного поиска по такой таблице длиной в 256 двухбайтных чисел требуется не более 8 итераций.
Barmaley_m, он явно пишет что по адресу #7f00 находится таблица интерполяций где есть адреса 4 таблиц под 4 диапазона
а расчеты сюда покажешь?
---------- Post added at 12:33 ---------- Previous post was at 12:32 ----------
скорость вычисления какая?
С уважением,
Jerri / Red Triangle.
Если младший байт не учитывается, а он не учитывается судя по коду и по:Код:M1: LD L,H ; 4 : 1 LD H,127 ; 7 : 2 LD H,(HL) ; 7 : 1 LD L,A ; 4 : 1 ADD A,(HL); 7 : 1 RET ; 10 : 1то зачем пять таблиц по 256байт?! Достаточно одной на 256 байт.Код:Ошибка на -1 = 10321 число. 15% Ошибка на +1 = 5199 чисел. 8%
---------- Post added at 13:32 ---------- Previous post was at 13:11 ----------
причём первые 16 значений таблицы не используютсяКод:M1 ld l,h ld h,high tabl2 ld a,(hl) ret генерация второй таблицы: n=0......255 (n+tabl2)=целое(корень(n*256))
Но, ради взрыва мозга, можно и штаны через голову одеть.
---------- Post added at 13:59 ---------- Previous post was at 13:32 ----------
опс сорри, только щас топик до конца дочитал:
Последний раз редактировалось DimkaM; 23.03.2012 в 15:07.
точность наверное
С уважением,
Jerri / Red Triangle.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)