Важная информация

User Tag List

Страница 8 из 32 ПерваяПервая ... 456789101112 ... ПоследняяПоследняя
Показано с 71 по 80 из 312

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

  1. #71
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,843
    Спасибо Благодарностей отдано 
    654
    Спасибо Благодарностей получено 
    1,818
    Поблагодарили
    1,044 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну и для 536 и 800 знаков результат очень хороший, особенно если учесть, как реализованы умножение и деление.

  2. #72
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,847
    Спасибо Благодарностей отдано 
    84
    Спасибо Благодарностей получено 
    229
    Поблагодарили
    167 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    особенно если учесть, как реализованы умножение и деление.
    Ты на что это, царская морда, намекаешь?

    - - - Добавлено - - -

    Хотя, с делением я согласен, для деления старших двух байт можно 16/16 алгоритм использовать.

  3. #73
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,843
    Спасибо Благодарностей отдано 
    654
    Спасибо Благодарностей получено 
    1,818
    Поблагодарили
    1,044 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Но но, папрашу без фамильярнасти!

    Фактически у тебя получилось вручную откомпилировать для 8080 с несколько большей эффективностью, чем тот си для z80. И это еще без всяких развертываний циклов и таблиц. Интересно, будет ли эффективно дальнейшее увеличение основания? Хотя для 8080 вряд ли, с учетом роста сложности реализации умножения и деления.

  4. #74
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,847
    Спасибо Благодарностей отдано 
    84
    Спасибо Благодарностей получено 
    229
    Поблагодарили
    167 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Развернул циклы умножения и деления, теперь 100 знаков 10.644 сек.

    Цитата Сообщение от ivagor Посмотреть сообщение
    будет ли эффективно дальнейшее увеличение основания?
    Видимо нет. Если считать по 5 знаков за раз, то делить/умножать нужно будет уже на 100000, а оно в 16 бит не полезет. Эффективные процедуры для "честных" 32-битных умножения/деления я вряд-ли сделаю. Да и неизвестно, что там будет после умножения на 100000, может произведение и в 32 бита не влезет.
    Последний раз редактировалось b2m; 12.11.2015 в 14:23.

  5. #75
    Master
    Регистрация
    16.12.2014
    Адрес
    г. Ожерелье
    Сообщений
    743
    Спасибо Благодарностей отдано 
    223
    Спасибо Благодарностей получено 
    40
    Поблагодарили
    39 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Тут похоже никого кроме как с РК86 и нет. Кроме бкашников, возможно никто и не знает. Но прикрепляю программку и снимок экрана.
    800 знаков за 5м 41с
    100 знаков за 5.8c
    Использовалось умножение с 2К таблицей и деление с раскрученными циклами.
    На БК должно хорошо деление получится, а с умножением будет плохо - медленно там с байтовыми таблицами.
    Нажмите на изображение для увеличения. 

Название:	pi800-6502-commodore+4.gif 
Просмотров:	293 
Размер:	14.9 Кб 
ID:	54870
    pi-6502.zip
    Результат 100 знаков за 10 сек. на Радио-РК впечатляет. Это на 2 МГц? Популярнейший Коммодор 64 (как и АГАТ) с этой программкой не должен справиться быстрее чем за сек 14.
    Проверил программку на типовом ПК c AMD 3.4 МГц и N=210000, никаких ошибок переполнения d не было, но расхождение на 32375-й цифре. Пи брал с программы Reduce (https://en.wikipedia.org/wiki/Reduce...lgebra_system)).

  6. #76
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,847
    Спасибо Благодарностей отдано 
    84
    Спасибо Благодарностей получено 
    229
    Поблагодарили
    167 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от litwr Посмотреть сообщение
    Результат 100 знаков за 10 сек. на Радио-РК впечатляет. Это на 2 МГц?
    1.78МГц!!!

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

  8. #77
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,843
    Спасибо Благодарностей отдано 
    654
    Спасибо Благодарностей получено 
    1,818
    Поблагодарили
    1,044 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Насчет программы с арктангенсами. Она работает, но последние цифры выдает неправильно. Т.е. например, чтобы правильно посчитать 1000 цифр, нужно задать расчет 1004 цифр. И, похоже, с определенной цифры она начинает совсем неправильно считать. Но, повторюсь, 1000 цифр посчитать ею можно. Причем, если уменьшить константы
    short B=10; /* Working base */
    short LB=1; /* Log10(base) */
    short MaxDiv=57; /* about sqrt(2^15/B) */
    то все long можно заменить на short

    - - - Добавлено - - -

    C short считает правильно до 4138 цифр

    - - - Добавлено - - -

    В исходном виде (с long) считает заметно лучше spigotа с основанием 10000, который с 64-битной арифметикой считал правильно только до 54392 цифр. Арккотангенсная программа правильно посчитала и 110000, наверняка и больше правильно посчитает, но это уже долговато.

    - - - Добавлено - - -

    Ну и 200000 знаков правильно посчитала почти за 5 минут. Дальше не буду пробовать, это уже и для 16биток многовато

  9. #78
    Master
    Регистрация
    16.12.2014
    Адрес
    г. Ожерелье
    Сообщений
    743
    Спасибо Благодарностей отдано 
    223
    Спасибо Благодарностей получено 
    40
    Поблагодарили
    39 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    1.78МГц!!!
    8080 совсем неплох для арифметики, z80 тут ничего почти не улучшает, только частота повыше.
    Прогнал вашу программку (с минимальным подгоном под систему) на Amstrad CPC6128 c z80 на 4 мгц (реально 3.2).
    Нажмите на изображение для увеличения. 

Название:	pi800.png 
Просмотров:	300 
Размер:	5.2 Кб 
ID:	54874Нажмите на изображение для увеличения. 

Название:	pi1000.png 
Просмотров:	272 
Размер:	5.5 Кб 
ID:	54875
    Результаты: 100 знаков - 6.14 с, 800 - 6м 4.91c, 1000 - 9м 26.82c
    Интересно будет сравнить со Спектрумом...
    Ha Commodore+4 1000 знаков за 9м 1.04c (программку чуть улучшил - pi-6502.zip).
    Получается, что на "тяжёлой" арифметике 6502 только раза в полтора побыстрее на одинаковой частоте.

  10. #79
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,843
    Спасибо Благодарностей отдано 
    654
    Спасибо Благодарностей получено 
    1,818
    Поблагодарили
    1,044 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Под z80 можно заметно оптимизировать, да и для 8080 предел не достигнут.

  11. #80
    Veteran Аватар для perestoronin
    Регистрация
    25.11.2011
    Адрес
    г. Красногорск
    Сообщений
    1,389
    Спасибо Благодарностей отдано 
    16
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    с определенной цифры она начинает совсем неправильно
    Для каждой точности есть свой вариант уточненной формулы Мэчина.
    Самая простая формула обладает невысокой точностью, но при этом является более быстрой.

    https://en.wikipedia.org/wiki/Approximations_of_π

    Думаю, что упущен момент с расчетом неких констант, выраженный в этой программе на бейсике:
    Код:
    ; This BASIC program was used to calculate the equates for PIF.ASM.
    ;    DEFDBL A-Z
    ;    INPUT "Digits required"; A
    ;    MPVSize = 32 * ((A / (LOG(2) / LOG(10)) + 255) \ 256)
    ;   PRINT "NumDigits = "; A + 64
    ;   PRINT "MPVSize = "; MPVSize
    ;   k = A / .69897
    ;   k = INT(15 + (k + k * .1)) 'floor 1
    ;   PRINT "Last1 = "; k
    ;   k = INT(15 + (A / 2.37))   'floor 2
    ;   PRINT "Last2 = "; k
    ;
    numDigits=164
    mpvSize=74
    last1=172
    last2=57
    - - - Добавлено - - -

    Цитата Сообщение от ivagor Посмотреть сообщение
    Насчет программы с арктангенсами.
    Реализация на Си далека от идеала. Смотрите реализацию на асме 286 и возможно ли её перенести на 8080 без потери эффективности ?
    https://sites.google.com/site/richge...-pi-calculator
    Последний раз редактировалось perestoronin; 11.11.2015 в 23:45.

    Ретрокладовая продажи

    продажи
    [свернуть]

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

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

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

Эту тему просматривают: 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

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

Ваши права

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