User Tag List

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

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

  1. #41
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,662
    Спасибо Благодарностей отдано 
    1,255
    Спасибо Благодарностей получено 
    1,883
    Поблагодарили
    711 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Vitamin Посмотреть сообщение
    А если набор чисел, на которые умножается тангенс, невелик, то сразу рассчитать набор таблиц:
    Вот к чему я и говорю, что сначала надо хорошо представлять то, что хочешь рассчитать. А потом уже оптимизировать и делать таблицы.

    ---------- Post added at 13:10 ---------- Previous post was at 13:10 ----------

    Цитата Сообщение от Andrew771 Посмотреть сообщение
    ну тогда на бейсике заранее рассчитываем и строим таблицу тангенсов по приведенным формулам.
    Да вы, батенька, предыдущую страницу не смотрели)

  2. #42
    Veteran Аватар для ZXMAK
    Регистрация
    30.01.2006
    Адрес
    Харьков
    Сообщений
    1,406
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    15 сообщений
    Mentioned
    1 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

  3. #43
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,058
    Спасибо Благодарностей отдано 
    224
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

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

  4. #44
    Veteran Аватар для Destr
    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,804
    Спасибо Благодарностей отдано 
    253
    Спасибо Благодарностей получено 
    114
    Поблагодарили
    88 сообщений
    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
    Но порой она ошибается.
    Где глюк не пойму. Кто знает?

  5. #45
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,662
    Спасибо Благодарностей отдано 
    1,255
    Спасибо Благодарностей получено 
    1,883
    Поблагодарили
    711 сообщений
    Mentioned
    67 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.

  6. #46
    Veteran Аватар для Destr
    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,804
    Спасибо Благодарностей отдано 
    253
    Спасибо Благодарностей получено 
    114
    Поблагодарили
    88 сообщений
    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 не получится?

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

  8. #47
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,662
    Спасибо Благодарностей отдано 
    1,255
    Спасибо Благодарностей получено 
    1,883
    Поблагодарили
    711 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

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

  9. #48
    Veteran Аватар для Destr
    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,804
    Спасибо Благодарностей отдано 
    253
    Спасибо Благодарностей получено 
    114
    Поблагодарили
    88 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  10. #49
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,662
    Спасибо Благодарностей отдано 
    1,255
    Спасибо Благодарностей получено 
    1,883
    Поблагодарили
    711 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

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

  11. #50
    Veteran Аватар для Destr
    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,804
    Спасибо Благодарностей отдано 
    253
    Спасибо Благодарностей получено 
    114
    Поблагодарили
    88 сообщений
    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

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

Ваши права

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