User Tag List

Страница 5 из 11 ПерваяПервая 123456789 ... ПоследняяПоследняя
Показано с 41 по 50 из 105

Тема: Что такое тангенс и как с ним боротся?

Комбинированный просмотр

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

    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,286
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    39 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Destr Посмотреть сообщение
    Может у вас есть и хорошая процедура деления?
    (вида 8.8=8/8, только не такая как в Sp.Expert и ZX-Format описывается, у них там либо с ограничением, либо наворотов до небес)
    http://zxdocs.fatal.ru/coding/math.zip

    Тебе нужно 16/8. Числитель надо грузить в старший байт, тогда в результате будет 16 битное число с фиксированной точностью.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  4. #3

    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,089
    Спасибо Благодарностей отдано 
    281
    Спасибо Благодарностей получено 
    70
    Поблагодарили
    49 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Полностью поддерживаю Titus. Без указания целей использования тангенсов, говорить об их вычислении не имеет смысла. В зависимости от целей можно избрать тот или иной способ вычисления/хранения результата, который в данных конкретных обстоятельствах будет эффективным, а в других обстоятельствах - неточным, медленным или вообще неприменимым.

    Более того, я вообще не понимаю, зачем могут понадобиться тангенсы. Обычно, если сталкивался с тригонометрией при графических вычислениях, я имел дело с арктангенсами (т.е. обратной функцией). Прежде, чем быстро или медленно вычислять эти функции, неплохо бы детально разобраться в применяемых формулах, преобразовать их исходя из имеющихся вычислительных возможностей. Может быть, от тангенсов вообще удастся избавиться. Часто бывает, что тангенс угла tg(x) заменяют его аргументом tg x ~= x, и это дает приемлемую точность при небольших значениях x.

    Вообще от тангенсов желательно избавляться, если возможно. Эта функция ведет себя плохо с точки зрения программирования - она уходит в бесконечность при конечных значениях аргумента (x=pi/2). В окрестностях агрумента x=pi/2 из-за этого всегда будут неприятности, при любой точности хранения или вычисления тангенсов.

  5. #4

    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,821
    Спасибо Благодарностей отдано 
    273
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    95 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Замутил вот такую процедуру деления
    Код:
    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
    Но порой она ошибается.
    Где глюк не пойму. Кто знает?

  6. #5

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,373
    Спасибо Благодарностей отдано 
    1,695
    Спасибо Благодарностей получено 
    2,214
    Поблагодарили
    868 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Destr Посмотреть сообщение
    Но порой она ошибается.
    Где глюк не пойму. Кто знает?
    Есть несколько замечаний:
    Ты делишь 7-битное число на 7-битное, т.к. оба со знаком, но при этом делаешь 16 итераций, словно у тебя не C делится на B, а какая-то регистровая пара типа C1.C2 делится на B. После первых 8 сдвигов в C уже ничего не остается, и второй цикл работает вхолостую. Мало того, если в H у тебя предварительно мусор, то он уже со второй восьмерки итераций окажется в регистре C, и будет фактически деление C.H/B. Вернее даже что-то типа H=C/B, L=H/B.

  7. #6

    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,821
    Спасибо Благодарностей отдано 
    273
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    95 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Есть несколько замечаний:
    Ты делишь 7-битное число на 7-битное, т.к. оба со знаком, но при этом делаешь 16 итераций, словно у тебя не C делится на B, а какая-то регистровая пара типа C1.C2 делится на B. После первых 8 сдвигов в C уже ничего не остается, и второй цикл работает вхолостую. Мало того, если в H у тебя предварительно мусор, то он уже со второй восьмерки итераций окажется в регистре C, и будет фактически деление C.H/B. Вернее даже что-то типа H=C/B, L=H/B.
    А как выправить?
    Насколько я понял тупо заменить DUP 8 на DUP 7 не получится?

  8. #7

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,373
    Спасибо Благодарностей отдано 
    1,695
    Спасибо Благодарностей получено 
    2,214
    Поблагодарили
    868 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Destr Посмотреть сообщение
    А как выправить?
    Насколько я понял тупо заменить DUP 8 на DUP 7 не получится?
    Ты обьясни, что на что и в какой разрядности ты хочешь получить.

  9. #8

    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,821
    Спасибо Благодарностей отдано 
    273
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    95 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Ты обьясни, что на что и в какой разрядности ты хочешь получить.
    Нужно вычислить длину гипотенузы прямоугольного треугольника, зная при этом один из катетов и синус(косинус).
    Катет - 8 бит
    Синус(косинус) - тоже 8 бит.
    Итак, гипотенуза равна катет/синус.

  10. #9

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,373
    Спасибо Благодарностей отдано 
    1,695
    Спасибо Благодарностей получено 
    2,214
    Поблагодарили
    868 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Destr Посмотреть сообщение
    Нужно вычислить длину гипотенузы прямоугольного треугольника, зная при этом один из катетов и синус(косинус).
    Катет - 8 бит
    Синус(косинус) - тоже 8 бит.
    Итак, гипотенуза равна катет/синус.
    Еще раз предлагаю уйти от делений по возможности. Побитное деление всегда более тормозной процесс, чем умножение. А у тебя деление на константу (синус). Так сделай таблицу чисел 1/синус, и применяй умножение.

  11. #10

    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,821
    Спасибо Благодарностей отдано 
    273
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    95 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Еще раз предлагаю уйти от делений по возможности. Побитное деление всегда более тормозной процесс, чем умножение. А у тебя деление на константу (синус). Так сделай таблицу чисел 1/синус, и применяй умножение.
    Синусы для разных углов - разные (и порой 1/sin=хзч, так как синус = 0 бывает)
    И вообще это двухбайтное значение получается. Очень смахивает на тангенс по упоротости. Так что тормоза остаются при нас
    Вот я мучался с этими таблицами, мучался и решил тупо делить по-честному.
    Но тоже не получается

Страница 5 из 11 ПерваяПервая 123456789 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Что такое SamRam?
    от ARTi в разделе Несортированное железо
    Ответов: 2
    Последнее: 23.11.2007, 16:20
  2. А вот как вам такое?
    от icebear в разделе Несортированное железо
    Ответов: 2
    Последнее: 13.08.2005, 16:38

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

Ваши права

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