User Tag List

Показано с 1 по 10 из 331

Тема: Вычисление числа Пи на ассемблере

Древовидный режим

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

    Регистрация
    25.11.2015
    Адрес
    г. Москва
    Сообщений
    192
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    14 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Формула 12*atan(1/18)+8*atan(1/57)-5*(atan(/239), по сравнению с 4*atan(1/5)-atan(1/239) требует на пару процентов меньше делений, но в последней формуле, применительно к вычислению 100 знаков, делить на 239^2 требуется только в 11% случаев, во всех остальных - делить нужно на числа менее 256, то есть для i8080 самый оптимальный вариант. С 8 разрядным делением всё просто, в HL делимое, в BC делитель*128, DE=-BC, ну а дальше сначала складываем(вычитаем), делаем если нужно переход, добавляем разряд частного к A, потом удваиваем HL. Ну а в 16-разрядном сначала удвоение HL, переход по переполнению, сложение(вычитание), переход, в половине ветвей добавление разряда частного к A(можно сразу добавлять 2^n, ничего не сдвигая). На выходе должен получиться отрицательный остаток, чтобы к нему можно было добавить байт и сразу скорректировать остаток/частное, если было переполнение. В общем по сравнению с 8-разрядным делением, требующим 4 команды на бит, здесь потребуется дополнительный переход, и несколько команд в конце для добавления байта.

    В качестве обобщения, прицеплю сюда небольшую модификацию беззнакового деления с 4 ветвями, можно выкинуть половину и чуть ускорить, если делителей более 2^15 не требуются, а для Z80 можно легко расширить до 32х разрядного делителя, если делать обмен регистров. udiv16.txt

    Еще наткнулся в википедии на Метод БВЕ, смысл которого в том, что слагаемые группируются сначала парами, общий множитель выносится за скобки, а оставшиеся дроби приводятся к общему знаменателю и складываются, далее пары опять объединяются и таким же образом вычисляются новые дроби. А в конце нужно будет просто поделить два очень больших числа. Можно даже на завершающих шагах не вычислять больше требуемой точности, но плавающая точка с мантиссой переменной длины это наверно будет жесть и для 100 или 1000 цифр эффекта не даст.
    Последний раз редактировалось blackmirror; 10.01.2016 в 14:04.

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

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

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

Похожие темы

  1. Арифметические процедуры на ассемблере
    от spensor в разделе Программирование
    Ответов: 27
    Последнее: 13.05.2017, 20:56
  2. Мнемокоманды и числа.
    от ALKO в разделе Программирование
    Ответов: 0
    Последнее: 15.02.2014, 03:49
  3. try-catch на ассемблере z80
    от siril в разделе Программирование
    Ответов: 22
    Последнее: 30.10.2012, 21:17
  4. Определение числа сторон
    от mungo в разделе Внешние накопители
    Ответов: 1
    Последнее: 16.03.2012, 18:06

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

Ваши права

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