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

User Tag List

Страница 1 из 32 12345 ... ПоследняяПоследняя
Показано с 1 по 10 из 312

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

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

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

    Эта тема создана как ответвление темы "Отечественные компьютеры: быстродействие"

    Очень настаиваю очень важные философские вопросы поднимать не здесь, а в отдельной теме во флейме "Пожужжим о "расчете числа Пи"

    "Вычисление числа Пи с заданной точностью на ассемблере как тест для процессоров", надеюсь полная постановка задачи всем известна.

    Для сверки результата можно использовать 10 миллионов цифры по ссылке под спойлером - осторожно 10 миллионов символов это ТРАФИК!:

    Скрытый текст

    Цитата Сообщение от Vslav Посмотреть сообщение
    Взял Пи вот тут
    [свернуть]


    Желающие запостить свои творения в эту тему - прошу не стесняться своего кода, надеюсь никто смеяться не будет и гуру помогут выправить код.

    Для Z80 расчет числа Пи, приславший пожелал остаться неизвестным, автор программы в архиве указан.
    Прошу протестировать на реалах и эмуляторах. Особенно интересен результат на процессорах КР1858ВМ*
    z80pi.rar

    Результаты:
    Цитата Сообщение от Vslav Посмотреть сообщение
    1801ВМ2 @ 10MHz EIS On (HMUL=1, HDIV=1):
    100 знаков 0,50 сек (было 0,58)
    Цитата Сообщение от litwr Посмотреть сообщение
    PDP-11/83(18 МГц).
    100 знаков - 0.2
    Цитата Сообщение от Vslav Посмотреть сообщение
    Реальный 1801ВМ1Г 5МГц (+MUL)
    100 знаков - ~2,1 сек
    Цитата Сообщение от MiX Посмотреть сообщение
    ДВК-3:
    100 знаков- 0,7сек
    Цитата Сообщение от ivagor Посмотреть сообщение
    Вектор:
    100 - 2.7568 сек
    Цитата Сообщение от litwr Посмотреть сообщение
    Коммодор +4 (MOS 8501 @ 1.76 МГц) - 1.72
    Amstrad CPC6128 (Z80, @ 4 Мгц) - 2.48
    Цитата Сообщение от litwr Посмотреть сообщение
    Commodore 64/PAL (MOS 6510 @ 1,023 МГц) - 4.03
    Commodore 128/PAL (MOS 8502 @ 2 МГц & Z80 @ 4 МГц) - 2.2
    http://litwr2.atspace.eu/retropc.html
    РК86:
    Самый первый результат конечно же был прислан для
    Цитата Сообщение от b2m Посмотреть сообщение
    Радио-86РК, 100 знаков, 53 секунды
    , впоследствии улучшен
    Цитата Сообщение от b2m Посмотреть сообщение
    вариант без таблиц, 8.89 сек. pi.rar
    Цитата Сообщение от b2m Посмотреть сообщение
    с новой реализацией умножения теперь 8.117 сек Вложение 54904
    Цитата Сообщение от ivagor Посмотреть сообщение
    Очередная и, надеюсь, последняя версия spigota - Вложение 54829
    100 знаков - 19897238 тактов - 11.19 сек (это с расчетом таблицы!)
    535 знаков - 551337754 тактов - 5 мин 10 сек
    Запускать нужно G4200
    Цитата Сообщение от litwr Посмотреть сообщение
    Получается, что на "тяжёлой" арифметике 6502 только раза в полтора побыстрее на одинаковой частоте.
    Адаптируйте и проверьте пожалуйста счастливые обладатели Агатов 7 и 9 и собранного Apple I. Кстати реплика не планируется 9ки ?

    18.11.2015: впервые портирована простая реализация расчета числа Пи на БК (процессор К1801ВМ1, Система команд по ОСТ 11 305.909-82 (может у кого есть скан этого документа?, поделитесь им в этой теме) ):
    Цитата Сообщение от litwr Посмотреть сообщение
    Сделал программку для БК. Запускал в эмуляторе BK-TERAK.
    На этом эмуляторе 100 цифр за 6 сек, 1000 - за 9м 21с.
    Прикрепляю и файлы для "иностранцев" с исходниками и файлами для эмуляторов или для переноса на железо.
    Вложение 54932
    Вложение 54931
    Вложение 54930
    Но для других архитектур хотя и не было представлено результатов, но были присланы программы и их исходники для тестирования на реалах и эмуляторах.

    Цитата Сообщение от perestoronin Посмотреть сообщение
    Для Z80 расчет числа Пи, приславший пожелал остаться неизвестным, автор программы в архиве указан.

    Прошу протестировать на реалах и эмуляторах. Особенно интересен результат на процессорах КР1858ВМ*
    Как вариант можно рассмотреть быстрый алгоритм:
    https://en.wikipedia.org/wiki/Machin-like_formula
    И библиотеку z88dk
    http://www.z88dk.org/wiki/doku.php?i...ew:examples:pi
    Цитата Сообщение от litwr Посмотреть сообщение
    В связи с таким расчетом запустил на стандартном консольном калькуляторе на Raspberry Pi c 900 МГц
    time echo 'scale=1000;16*a(1/5)-4*a(1/239)'|bc -l
    т.е. 1000 знаков - отсчитано с 1.5 сек.
    Сопоставлять результаты будем когда накопится с 10 различных платформ, но уже видно, то ARM у нас 32 разрядный, а не 8 разрядный и частота в 250 раз выше чем у zx. Т.е. в 1000 раз производительнее, и результат полученный на ARM при сравнении с zx нужно делить примерно на 1000.

    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
    https://sites.google.com/site/richge...-pi-calculator

    А бонусом у нас должны получиться быстрые программы умножения и деления для всех ретро-процессоров, которые сгодятся и для других отличных от академических целей.

    Левенталь и Гудыменко нам в помощь:
    Левенталь 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:
    Цитата Сообщение от rw6hrm Посмотреть сообщение
    На форуме 6502 в топике http://forum.6502.org/viewtopic.php?f=2&t=2239 есть архивчики для процессоров 6500 и 6502:
    http://forum.6502.org/download/file....62659b6ca3a9f8
    http://forum.6502.org/download/file....62659b6ca3a9f8
    Интересно, как долго будет считаться число Пи на Денди
    [свернуть]

    Цитата Сообщение от ivagor Посмотреть сообщение
    реализации умножения и деления на z80 - не новая, но очень хорошая статья. Думаю про нее большинство знает, но может кто не читал. И, конечно, то, что там написано, вполне можно адаптировать для других процессоров.
    Цитата Сообщение от litwr Посмотреть сообщение
    Последний раз редактировалось perestoronin; 06.01.2016 в 00:22.

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

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

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

  3. #2
    Guru Аватар для MiX
    Регистрация
    13.12.2013
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,065
    Спасибо Благодарностей отдано 
    34
    Спасибо Благодарностей получено 
    74
    Поблагодарили
    62 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Кое-что из книги на BASIC.

  4. #3
    Veteran Аватар для rw6hrm
    Регистрация
    10.07.2005
    Адрес
    Ставрополь
    Сообщений
    1,151
    Спасибо Благодарностей отдано 
    35
    Спасибо Благодарностей получено 
    57
    Поблагодарили
    31 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    >прошу архитектуру х86 не рассматривать вовсе

    Извиняюсь, но на писишке оно выключилось на шаге 65536. Мож на БКшке или УКНЦ дойдёт до 32768 (там, где 16-битные процессоры стоят)?

  5. #4
    Moderator
    Регистрация
    25.11.2007
    Адрес
    Симферополь
    Сообщений
    2,164
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Блин в советском учебнике истории- было упомянуть что число ПИ получалось делением двух чисел(дробь). Но уже лет 16 ищу - и не могу найти каких именно.
    Упоминалось если не изменяет склероз - в контексте древней Греции вроде.
    Тема была что то про астрономию и про первые обсерватории в виде глубоких колодцев.
    На тот момент я проверял на калькуляторе эту дробь - выходила точность до последнего знака в калькуляторе.
    Найти бы ее - и все логарифмы,квадратные корни и экспоненты - стали бы не нужны! Там простое деление было.
    Вот есть много чего про Пи
    http://bizikov.ru/posts/history-of-pi/

    ---------- Post added at 23:15 ---------- Previous post was at 23:06 ----------

    Среди примечательных результатов предыстории числа
    π отметим довольно грубое приближение
    π= (31/8), которым пользовался
    известный римский архитектор Витрувий (живший в I в. до н. э.)
    (ему приходилось проектировать сооружения внушительных размеров, например, знаменитый Римский театр, и надо полагать, что
    используемое им грубое значение для
    π приводило к недочётам в
    строительстве), и выдающийся результат китайского математика
    и астронома Цзу Чунчжи (V в. н. э.)
    π = 355/113, дающий семь точных десятичных знаков числа
    π.
    Последний раз редактировалось balu_dark; 01.11.2015 в 23:18.
    Amiga 1200+Blizzard 1260 72 Mb+Mtek 68030,Compozit 128, Leningrad 2,
    Atari STE 1040,ZX Spectrum +2,Pentagon 48, Speccy2007 - 2 , ATAS 256k.
    ZX Evo 4Mb- в строю.
    Speccy2010 v1
    Специалист (пока готовлюсь к восстановлению).
    Это все мое!
    Родное!
    Все люблю на свете я! Это родина моя!

  6. #5
    Super Moderator Аватар для Ewgeny7
    Регистрация
    03.07.2005
    Адрес
    Санкт-Петербург
    Сообщений
    10,168
    Спасибо Благодарностей отдано 
    146
    Спасибо Благодарностей получено 
    76
    Поблагодарили
    51 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Витрувий Посмотреть сообщение
    π= (31/8), которым пользовался
    известный римский архитектор Витрувий
    Что-то сильно уж грубо. Знаменитое 22/7 гораздо точнее отражает суть Пи.
    ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
    Speccy-2007 128/AY/TR-DOS

    Сайт с документацией к "Scorpion ZS 256"

  7. #6
    Guru Аватар для MiX
    Регистрация
    13.12.2013
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,065
    Спасибо Благодарностей отдано 
    34
    Спасибо Благодарностей получено 
    74
    Поблагодарили
    62 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от rw6hrm Посмотреть сообщение
    Извиняюсь, но на писишке оно выключилось на шаге 65536. Мож на БКшке или УКНЦ дойдёт до 32768 (там, где 16-битные процессоры стоят)?
    Проверил на эмуляторе ДВК. Как видно, доходит до 65536 но после 16384 значение не меняется.

  8. #7
    R.I.P. Аватар для hobot
    Регистрация
    30.08.2011
    Адрес
    Зеленоград
    Сообщений
    7,161
    Спасибо Благодарностей отдано 
    2,979
    Спасибо Благодарностей получено 
    370
    Поблагодарили
    309 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Около темы статейка
    http://geektimes.ru/post/101210/
    Архив программ для УК-НЦ, ДВК и БК.

    Ищу игру "СТРАНА МОНСТРОВ" [monstr.sav] для ДВК.

  9. #8
    Veteran Аватар для Kakos_nonos
    Регистрация
    26.12.2010
    Адрес
    Кубань
    Сообщений
    1,152
    Спасибо Благодарностей отдано 
    31
    Спасибо Благодарностей получено 
    37
    Поблагодарили
    22 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вот алгоритм вычисления числа пи (1000+ цифр) использующий только целочисленную арифметику. Вполне можно реализовать на ретрокомпьютерах.
    http://habrahabr.ru/post/188700/

  10. #9
    Veteran Аватар для Kakos_nonos
    Регистрация
    26.12.2010
    Адрес
    Кубань
    Сообщений
    1,152
    Спасибо Благодарностей отдано 
    31
    Спасибо Благодарностей получено 
    37
    Поблагодарили
    22 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вот ещё Гоблин подсказал: http://scepticalinq.blogspot.ru/2015...950288419.html

    ---------- Post added at 17:29 ---------- Previous post was at 17:25 ----------

    Цитата Сообщение от perestoronin Посмотреть сообщение
    но в нем тоже требуются операции умножения и деления, которые придется программно реализовывать.
    Это не так трудно как вычисления с плавающей точкой, в книге Левинталя есть описания, но там, кажется 16-битные, это даст меньший размер числа. Но можно реализовать и 32-х. Умножение реализуется просто, а с делением и остатком надо подумать.

  11. #10
    Guru Аватар для MiX
    Регистрация
    13.12.2013
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,065
    Спасибо Благодарностей отдано 
    34
    Спасибо Благодарностей получено 
    74
    Поблагодарили
    62 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от perestoronin Посмотреть сообщение
    Точность 5 знаков очень маленькая, для старта рассматриваем 10 знаков.
    Прога на Паскале.

Страница 1 из 32 12345 ... ПоследняяПоследняя

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

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

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

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

Ваши права

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