Эта тема создана как ответвление темы "Отечественные компьютеры: быстродействие"
Очень настаиваю очень важные философские вопросы поднимать не здесь, а в отдельной теме во флейме "Пожужжим о "расчете числа Пи"
"Вычисление числа Пи с заданной точностью на ассемблере как тест для процессоров", надеюсь полная постановка задачи всем известна.
Для сверки результата можно использовать 10 миллионов цифры по ссылке под спойлером - осторожно 10 миллионов символов это ТРАФИК!:
Желающие запостить свои творения в эту тему - прошу не стесняться своего кода, надеюсь никто смеяться не будет и гуру помогут выправить код.
Для Z80 расчет числа Пи, приславший пожелал остаться неизвестным, автор программы в архиве указан.
Прошу протестировать на реалах и эмуляторах. Особенно интересен результат на процессорах КР1858ВМ*
z80pi.rar
Результаты:
РК86:
Самый первый результат конечно же был прислан для , впоследствии улучшен
Адаптируйте и проверьте пожалуйста счастливые обладатели Агатов 7 и 9 и собранного Apple I. Кстати реплика не планируется 9ки ?
18.11.2015: впервые портирована простая реализация расчета числа Пи на БК (процессор К1801ВМ1, Система команд по ОСТ 11 305.909-82 (может у кого есть скан этого документа?, поделитесь им в этой теме) ):
Но для других архитектур хотя и не было представлено результатов, но были присланы программы и их исходники для тестирования на реалах и эмуляторах.
Как вариант можно рассмотреть быстрый алгоритм:
https://en.wikipedia.org/wiki/Machin-like_formula
И библиотеку z88dk
http://www.z88dk.org/wiki/doku.php?i...ew:examples:pi
Сопоставлять результаты будем когда накопится с 10 различных платформ, но уже видно, то ARM у нас 32 разрядный, а не 8 разрядный и частота в 250 раз выше чем у zx. Т.е. в 1000 раз производительнее, и результат полученный на ARM при сравнении с zx нужно делить примерно на 1000.
https://en.wikipedia.org/wiki/Approximations_of_π
На заметку, по этой ссылке собран анализ всех рассмотренных нами алгоритмов, и дан обзор других, более современных и возможно ещё более быстрых на ретро-железках, главное подобрать теперь под каждый из процессоров ту формулу, которая будет для конкретного процессора самой быстрой
Походу исследований на эту тему никто еще не делал
Для каждой точности есть свой вариант уточненной формулы Мэчина.
Самая простая формула обладает невысокой точностью, но при этом является более быстрой.
Думаю, что упущен момент с расчетом неких констант, выраженный в этой программе на бейсике:
https://sites.google.com/site/richge...-pi-calculatorКод:; 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
А бонусом у нас должны получиться быстрые программы умножения и деления для всех ретро-процессоров, которые сгодятся и для других отличных от академических целей.
Левенталь и Гудыменко нам в помощь:
Левенталь 6502 Подпрограммы на ассемблере (книга на английском).
Цифры - просто для истории и справки:
Дополнительные материалы и ссылки под спойлером ниже:Скрытый текст
Также будут интересны результаты и для КР580ВМ* и КР1858ВМ*, но думаю они будут неутешительными - у них нет команд целочисленного умножения и деления, но в случае реализации процессора Z80 на ПЛИС это можно обойти добавив пару недостающих команд в набор команд. Такой результат тоже засчитывать будем Тем более что такие обсуждения три года назад уже поднимались, в идеале можно взять за основу возможности сопроцессоров am9511, am9512, National Semiconductor MM57109N.
Интересная заметка в вики по поводу как можно уменьшить время выполнения умножения и деления на Z80 используя его архитектуру
+ еще полезные ссылки по реализации умножения и деления на Z80
аппратные на ПЛИС (подобные командам Z180 и выше):
http://opencores.org/project,y80e
http://homepage3.nifty.com/z80/
программные:
http://z80-heaven.wikidot.com/math
http://sgate.emt.bme.hu/patai/public...ide/part4.html
http://chilliant.blogspot.ru/2010/12...assembler.html
Общая информация
http://www.z80.info/
полезные ссылки про архитектуру 1801ВМ2 и ему подобных:
http://yavix.ru/вики 1801BMx
http://www.wikiwand.com/ru/Союз-Неон_ПК-11/16
Алгоритм заточенный на многоядерность:
http://www.numberworld.org/y-cruncher/algorithms.html
Интересная статистика упомянутых алгоритмов:
http://members.shaw.ca/francislyster/pi/pi.html
Индексатор ссылок на ресурсы с исходниками некоторых других реализаций вычисления числа Пи
http://www.pi314.net/eng/programmes.php
На процессорах 6502:
Интересно, как долго будет считаться число Пи на Денди[свернуть]