User Tag List

Страница 8 из 11 ПерваяПервая ... 4567891011 ПоследняяПоследняя
Показано с 71 по 80 из 105

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

  1. #71

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

    По умолчанию

    Цитата Сообщение от Ghost Посмотреть сообщение
    Зачем возится с катетом и гипотенузой если есть ряд Маклорена для тригонометрических функций?
    Ряд Маклорена (Тейлора) для тригонометрических функций годится разве что для теоретических выкладок или для студентов на первом курсе в качестве иллюстрации основ численных расчетов. Для практического расчета синусов и других триг. функций есть более эффективные методы, например, разложение в ряд по полиномам Чебышева. Именно этот метод используется спектрумовским бейсиком.

    Однако для расчетов на Спектруме в реальном времени даже эти более эффективные методы уступают по скорости вычислений таблицам. Поэтому вычисление функций через ряды оправдано только тогда, когда таблицы требуемой точности займут слишком много памяти.

  2. #72

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

    По умолчанию

    Цитата Сообщение от NovaStorm Посмотреть сообщение
    ;Divide 16-bit values (with 8-bit result)
    ;In: Divide HL by divider D
    ;Out: L = result, H = rest
    ;
    Div12: ld b,8
    Div12_Loop:
    and a
    sbc hl,de
    jp p,Div12_NoAdd
    add hl,de
    add hl,hl
    djnz Div12_Loop
    ret
    Div12_NoAdd:
    scf
    adc hl,hl
    djnz Div12_Loop
    ret
    Вообще не хочет делить как надо.

    Та процедура что в ссылке (похожая) - тоже
    Последний раз редактировалось Destr; 02.11.2011 в 16:34.

  3. #73

    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,869
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    110
    Поблагодарили
    66 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Destr Посмотреть сообщение
    Вообще не хочет делить как надо.

    Та процедура что в ссылке (похожая) - тоже
    Почти весь код для Спектрума, который я скачивал из инета, не работает или работает неправильно. Всё время приходилось напильничком дорабатывать. Видимо, в статьях сокращают или пишут авторы-теоретики

    Для деления, ИМХО, нужно написать алгоритм деления столбиком, как в 3-м классе средней школы. Тут даже проще, т.к. только нули и единицы.

    ---------- Post added at 09:41 ---------- Previous post was at 09:40 ----------

    А если это нужно для быстрой графики, то лучше вообще не использовать, как уже выше писали.

  4. #74

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

    По умолчанию

    Вот рабочие куски кода из моей графической библиотеки (деление беззнаковое).
    Все заявления вида "не работает" сопровождать конкретными примерами (типа- на входе числа, на выходе такое, хотя ожидается другое). А то есть подозрения, что у топикстартера проблемы с матчастью.

    Код:
    DIV                     ;BC=BC/DE HL=BC mod DE
            LD	HL,0
            LD	A,16
            SLA	C
            RL	B
    DIVL    ADC	HL,HL
            SBC	HL,DE
            JR	NC,$+3
            ADD	HL,DE
            RL	C
            RL	B
            DEC	A
            JR	NZ,DIVL
            LD	A,B
            CPL	
            LD	B,A
            LD	A,C
            CPL	
            LD	C,A
            RET	
    
    DIVI
                            ;C=C/B A=C mod B
            XOR	A
            RL	C
            DUP	8
            ADC	A,A
            SUB	B
            JR	NC,$+3
            ADD	A,B
            CCF	
            RL	C
            EDUP	
            RET

  5. #75

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

    По умолчанию

    Цитата Сообщение от Andrew771 Посмотреть сообщение
    Для деления, ИМХО, нужно написать алгоритм деления столбиком, как в 3-м классе средней школы. Тут даже проще, т.к. только нули и единицы.
    Попытки реализовать были, но успеха мало (ибо в некоторых случаях алгоритм выдаёт некоректный результат из-за переполнения).

    Цитата Сообщение от Vitamin Посмотреть сообщение
    А то есть подозрения, что у топикстартера проблемы с матчастью.
    За процедуру - спасибо, попробую, а проблемы с матаном - и не скрывал.
    Говорил я уже что неуч и могу лажанутся конкретно.
    Но выяснить сможет-ли прога разделить 4 на 2 - сумею
    Вот как она поведёт себя внутри моего кода - тут уже претензии не к прогам (и их авторам/советчикам) а уже к самому себе. Я ведь только учусь, ни к кому претензий нет.

  6. #76

    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,869
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    110
    Поблагодарили
    66 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Destr Посмотреть сообщение
    в некоторых случаях алгоритм выдаёт некоректный результат из-за переполнения
    ну значит нужно это учитывать в коде, например перед переполнением перегонять старшие биты в другой регистр сдвигами.

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

  8. #77

    Регистрация
    05.03.2011
    Адрес
    Мелитополь
    Сообщений
    68
    Спасибо Благодарностей отдано 
    5
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Злобин, Григорьев. Программирование арифметических операций в микропроцессорах. - М., 1991.

    В этой книге приведено много готовых листингов сложений/вычитаний/умножений/делений для знаковых/беззнаковых разной разрядности операндов. А также рассмотрено множество вспомогательных преобразований. Изложение ведётся для ассемблеров ВМ80, ВМ86 и ВМ87, но от ВМ80 к Z80 перейти, по-моему, не проблема.

    И таки табличный способ имеет огромные преимущества в скорости. Но нужно применять его в самом общем виде. Для той же теоремы Пифагора: катет1.катет2=гипотенуза. Если разрядность исходных операндов велика, и объём таблицы сравним с объёмом ОЗУ, то можно (применимо к теореме Пифагора) вспомнить, что достаточно половины её объёма, поскольку сочетание катет1.катет2 даст то же значение, что и катет2.катет1. Если нужно ещё уменьшить таблицу, то можно вспомнить, что если катет1 много меньше катета2, то уменьшение его разрядности вдвое почти не скажется на точности результата. В этом случае нужно лишь прикрутить к алгоритму небольшую логику выбора таблиц, тоже относительно небольших.
    Разумеется, конкретика целиком и полностью определяется поставленной задачей в наиболее общей её формулировке, чтобы не получилось: "Как с помощью компьютера правильно повесить картину?" - "Возьмите гвоздь. Забейте его молотком. На гвоздь повесьте картину".
    Последний раз редактировалось VituZz; 03.11.2011 в 19:55.

  9. #78

    Регистрация
    06.05.2006
    Адрес
    Ливны, Орловская обл
    Сообщений
    1,169
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    >>Злобин, Григорьев. Программирование арифметических операций в микропроцессорах. - М., 1991.

    Нету там подходящего, я ж первым делом туда =)
    Только 16/16 на два листа. Ну и плюс под 580й, да. Но книга конечно знатная.

  10. #79

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

    По умолчанию

    Всем спасибо за советы, получилось побороть тангенсы.
    Во вложении - результат (который правда ещё допиливать и допиливать).
    Но видно что работает
    Дальше буду боротся с "зубцами" и прочим, тангесов вроде больше не предвидится
    Тему можно закрывать.

    P.S. Снапшот пофикшен под пентагон, управление курсорными клавишами, при нажатом SPACE - обновляется мини-карта, но при этом конечно тормоза небольшие.
    Вложения Вложения

  11. #80
    DimkaM
    Гость

    По умолчанию

    Мысли в слух, ни коим образом не касающиеся топикстартера, у него свои цели.

    Я в этих вещах не шарю, но думаю можно вообще без тригонометрии в коде обойтись.
    Сейчас поворот идёт на 1/32 круга, 1/8 стороны получается. Т.е. написать 8 оптимизированных процедур преобразования и обойтись без таблиц и хитрых умножений-делений. Чую многократный прирост производительности.

    Ещё раз повторюсь, геометрию не знаю, тем более не умею её программить. Но хотелось бы почитать комменты моего поста.

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

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

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

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

Похожие темы

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

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

Ваши права

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