Ну и для 536 и 800 знаков результат очень хороший, особенно если учесть, как реализованы умножение и деление.
Ну и для 536 и 800 знаков результат очень хороший, особенно если учесть, как реализованы умножение и деление.
Но но, папрашу без фамильярнасти!
Фактически у тебя получилось вручную откомпилировать для 8080 с несколько большей эффективностью, чем тот си для z80. И это еще без всяких развертываний циклов и таблиц. Интересно, будет ли эффективно дальнейшее увеличение основания? Хотя для 8080 вряд ли, с учетом роста сложности реализации умножения и деления.
Развернул циклы умножения и деления, теперь 100 знаков 10.644 сек.
Видимо нет. Если считать по 5 знаков за раз, то делить/умножать нужно будет уже на 100000, а оно в 16 бит не полезет. Эффективные процедуры для "честных" 32-битных умножения/деления я вряд-ли сделаю. Да и неизвестно, что там будет после умножения на 100000, может произведение и в 32 бита не влезет.
Последний раз редактировалось b2m; 12.11.2015 в 14:23.
Тут похоже никого кроме как с РК86 и нет. Кроме бкашников, возможно никто и не знает. Но прикрепляю программку и снимок экрана.
800 знаков за 5м 41с
100 знаков за 5.8c
Использовалось умножение с 2К таблицей и деление с раскрученными циклами.
На БК должно хорошо деление получится, а с умножением будет плохо - медленно там с байтовыми таблицами.
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)).
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Насчет программы с арктангенсами. Она работает, но последние цифры выдает неправильно. Т.е. например, чтобы правильно посчитать 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биток многовато
8080 совсем неплох для арифметики, z80 тут ничего почти не улучшает, только частота повыше.
Прогнал вашу программку (с минимальным подгоном под систему) на Amstrad CPC6128 c z80 на 4 мгц (реально 3.2).
Результаты: 100 знаков - 6.14 с, 800 - 6м 4.91c, 1000 - 9м 26.82c
Интересно будет сравнить со Спектрумом...
Ha Commodore+4 1000 знаков за 9м 1.04c (программку чуть улучшил - pi-6502.zip).
Получается, что на "тяжёлой" арифметике 6502 только раза в полтора побыстрее на одинаковой частоте.
Под z80 можно заметно оптимизировать, да и для 8080 предел не достигнут.
Для каждой точности есть свой вариант уточненной формулы Мэчина.
Самая простая формула обладает невысокой точностью, но при этом является более быстрой.
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
Реализация на Си далека от идеала. Смотрите реализацию на асме 286 и возможно ли её перенести на 8080 без потери эффективности ?
https://sites.google.com/site/richge...-pi-calculator
Последний раз редактировалось perestoronin; 11.11.2015 в 23:45.
Ретрокладовая продажи
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)