http://zxdocs.fatal.ru/coding/math.zip
Тебе нужно 16/8. Числитель надо грузить в старший байт, тогда в результате будет 16 битное число с фиксированной точностью.
http://zxdocs.fatal.ru/coding/math.zip
Тебе нужно 16/8. Числитель надо грузить в старший байт, тогда в результате будет 16 битное число с фиксированной точностью.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
Полностью поддерживаю Titus. Без указания целей использования тангенсов, говорить об их вычислении не имеет смысла. В зависимости от целей можно избрать тот или иной способ вычисления/хранения результата, который в данных конкретных обстоятельствах будет эффективным, а в других обстоятельствах - неточным, медленным или вообще неприменимым.
Более того, я вообще не понимаю, зачем могут понадобиться тангенсы. Обычно, если сталкивался с тригонометрией при графических вычислениях, я имел дело с арктангенсами (т.е. обратной функцией). Прежде, чем быстро или медленно вычислять эти функции, неплохо бы детально разобраться в применяемых формулах, преобразовать их исходя из имеющихся вычислительных возможностей. Может быть, от тангенсов вообще удастся избавиться. Часто бывает, что тангенс угла tg(x) заменяют его аргументом tg x ~= x, и это дает приемлемую точность при небольших значениях x.
Вообще от тангенсов желательно избавляться, если возможно. Эта функция ведет себя плохо с точки зрения программирования - она уходит в бесконечность при конечных значениях аргумента (x=pi/2). В окрестностях агрумента x=pi/2 из-за этого всегда будут неприятности, при любой точности хранения или вычисления тангенсов.
Замутил вот такую процедуру деления
Но порой она ошибается.Код:DIVS; H.L=C/B LD A,C XOR B EXA LD A,C NEG JP M,$+4 LD C,A LD A,B NEG JP M,$+4 LD B,A XOR A DUP 8 RL C RLA CP B JR C,$+3 SUB B CCF RL H EDUP DUP 8 RL C RLA CP B JR C,$+3 SUB B CCF RL L EDUP EXA RET P EX HL,DE LD HL,0 OR A SBC HL,DE RET
Где глюк не пойму. Кто знает?
Есть несколько замечаний:
Ты делишь 7-битное число на 7-битное, т.к. оба со знаком, но при этом делаешь 16 итераций, словно у тебя не C делится на B, а какая-то регистровая пара типа C1.C2 делится на B. После первых 8 сдвигов в C уже ничего не остается, и второй цикл работает вхолостую. Мало того, если в H у тебя предварительно мусор, то он уже со второй восьмерки итераций окажется в регистре C, и будет фактически деление C.H/B. Вернее даже что-то типа H=C/B, L=H/B.
Синусы для разных углов - разные (и порой 1/sin=хзч, так как синус = 0 бывает)
И вообще это двухбайтное значение получается. Очень смахивает на тангенс по упоротости. Так что тормоза остаются при нас
Вот я мучался с этими таблицами, мучался и решил тупо делить по-честному.
Но тоже не получается![]()
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)