User Tag List

Страница 25 из 34 ПерваяПервая ... 212223242526272829 ... ПоследняяПоследняя
Показано с 241 по 250 из 331

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

  1. #241

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

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    crc-16 или, если очень хочется, crc-32
    Нет не крутовато, если хочется надежности, то даже md5sum слабо, то чего уж говорить про более примитивные.
    Кстати а чего крутого в этих простых функциях ? Что испугало ?
    Последний раз редактировалось perestoronin; 06.01.2016 в 11:11.

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

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

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

  3. #242

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,391
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от perestoronin Посмотреть сообщение
    чего крутого в этих простых функциях ?
    Про крутость я не писал, я писал про достаточность.

  4. #243

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

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    про достаточность
    Даже md5sum не достаточно надежная, от неё все прогрессивное человечество не так давно (что такое 5 лет в нашу эпоху) отказалось в пользу как минимум sha256sum.
    В файлах distinfo, использующихся в системе портов FreeBSD для контроля целостности исходных текстов, произошел полный переход на использование алгоритма вычисления контрольных сумм SHA-256. Это означает, что в файлах distinfo от новых пакетов MD5-суммы указываться не будут, а существующие строки с указанием MD5-сумм игнорируются.

    Такое решение принято, поскольку алгоритм SHA-256 является более стойким к криптоанализу, чем MD5, а проверка сразу двух видов контрольных сумм не увеличивала бы безопасность.
    Цитата Сообщение от ivagor Посмотреть сообщение
    Хотя мне вариант с контрольной суммой не особо нравится.
    Не нравится контрольной суммой, можно по старинке, хранить в листинге 100 верных чисел числа Пи и сравнивать в коде их с тем, что посчитал алгоритм. Тоже вариант
    А можно еще, just for fun, вывести двоичное представление числа Пи в прямоугольную область в правом верхнем углу экрана, и рядом ниже выводить посчитанное по тестируемому алгоритму, глаз обычно у всех алмаз, сразу увидит где пиксели различаются.
    Последний раз редактировалось perestoronin; 06.01.2016 в 11:24.

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

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

  5. #244

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,391
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от litwr Посмотреть сообщение
    Не смог психологически использовать для умножения на 10000 32 килобайта в таблицах как делают некоторые. Использовал таблицу на 768 байт
    Временно вернул умножение на 10000 по маленькой таблице, чтобы проверить сколько это дает - всего 2% с копейками.

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

    Чтобы закрыть тему влияния больших таблиц убрал еще и таблицу процедур для умножения младшего байта. Суммарный проигрыш (без большой таблицы *10000 и без таблицы процедур для умножения младшего байта) - примерно четыре с половиной процента, т.е. вклад каждой большой таблицы примерно 2 с небольшим процента.

  6. #245

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

    По умолчанию

    Решил проверить насколько хороша формула с арктангенсами:
    Pi/4=44*atan(1/57)+7*atan(1/239)-12*atan(1/682)+24*atan(1/12943)
    Если считать в лоб по разложению арктангенса в ряд, то для вычислений требуются только операции деления 24/16 и два буфера - для Pi и очередного слагаемого, можно вычислить 115К десятичных цифр, или в два раза меньше, если деление правильно работает только до 2^15. В элементах ряда присутствуют нечётные числа в качестве делителей, на них делить приходится параллельно со сложением или вычитанием. Перенос в соседний байт возникает в 20% случаев, а в следующий уже только в 0.1% случаев. Общее количество операций деления 24/16 примерено 0.4*N^2 (N - число десятичных цифр), но вычисления в алгоритме двоичные. Для gpigot'а требуется 0.83*N^2 операций деления 32/16 и в два раза больше операций умножения 16x16. В общем в данном виде вычисление Pi наверно будет раз в 10 быстрее, если всё не запороть алгоритмом перевода в десятичный вид. Как оказалось, формула 4*atan(1/5)-atan(1/239) требует немного меньше операций, но без расширения разрядности правильно считать будет только 45К цифр.
    machin1.txt
    Последний раз редактировалось blackmirror; 07.01.2016 в 23:03. Причина: не то прицепил

  7. #246

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

    По умолчанию

    Ура, нашему полку прибыло, в теме теперь есть и математики.
    Цитата Сообщение от blackmirror Посмотреть сообщение
    В общем в данном виде вычисление Pi наверно будет раз в 10 быстрее
    Неужели получим вычисление первых 100 цифр числа Пи меньше чем за доли секунды на КР580ВМ80А ?
    Цитата Сообщение от blackmirror Посмотреть сообщение
    правильно считать будет только 45К цифр.
    А нам то надо всего 0.1К цифр.
    Последний раз редактировалось perestoronin; 07.01.2016 в 23:20.

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

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

  8. #247

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

    По умолчанию

    Цитата Сообщение от perestoronin Посмотреть сообщение
    Неужели получим вычисление первых 100 цифр числа Пи меньше чем за доли секунды на КР580ВМ80А ?
    Боюсь, что это будет львиная доля, а то и не одна. Поскольку с вычитанием у него не очень, то для деления придётся занимать все регистры, значит будет развёрнутая процедура, которая загрузит байт, вызовет функцию деления 24/16, сохранит результат. Скорее всего адресацию придётся использовать абсолютную. Еще нужны будут похожие процедуры, которые результат не сохраняют, а вычитают или добавляют к числу Pi, и в некоторых случаях корректируют несколько байт для распространения переноса. Для вывода проще всего 50 раз домножить на 100 при помощи маленькой таблички. Только по мере домножения нужно будет укорачивать обрабатываемую часть, чтобы не обрабатывать мусор в младших разрядах. А при делении наоборот, отбрасывать старшие нули, делить их конечно можно, но зачем?

  9. #248

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,391
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вот этот вариант при замене типов на short правильно считает 4138 цифр. Причем большинство шортов можно заменить на беззнаковые, в т.ч. умножение и деление. Т.е. для расчета 100 и 1000 цифр там достаточно 16*16 и 16/16.

  10. #249

    Регистрация
    16.12.2014
    Адрес
    г. Ожерелье
    Сообщений
    769
    Спасибо Благодарностей отдано 
    252
    Спасибо Благодарностей получено 
    46
    Поблагодарили
    42 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Перенес суперделение на 6502. Трудно догадаться убрать верчение лишнего байта - благодарности уважаемому ivagor'у. Вот код для истории
    Код:
    div16            ;dividend+2 < divisor, CY = 0, AC = dividend+3
    .repeat 8
    	rol dividend+1
           	rol dividend+2
    	rol	
    	cmp divisor+1
            bcc l1
            bne l2
    
            ldx dividend+2
            cpx divisor
            bcc l1
    
    l2      tax
            lda dividend+2
            sbc divisor
            sta dividend+2
            txa
            sbc divisor+1
    l1
    .endr
            rol dividend+1
    
    .repeat 8
            rol dividend
           	rol dividend+2
    	rol	
    	cmp divisor+1
            bcc l1
            bne l2
    
            ldx dividend+2
            cpx divisor
            bcc l1
    
    l2      tax
            lda dividend+2
            sbc divisor
            sta dividend+2
            txa
            sbc divisor+1
    l1
    .endr
            rol dividend
            sta remainder+1
            lda dividend+2
            sta remainder
            lda #0
            sta dividend+2
    	sta dividend+3
    	rts
    Примерно 460 тактов, для z80 - 840. Итог по скорости 6502 быстрее только менее 90%. В некоторых случаях z80 показывает очень хорошую эффективность. Но на z80 легко писать очень плохие коды, а очень хорошие очень тяжело. С 6502 гораздо легче и коды легко масштабировать, типа сделать 64/32-деление.

    Последние данные по программам - дал им версию 1.

    Коммодор +4 1.62 - 152.3 - 1362
    Амстрад 6128 2.41 - 179.3 - 1582

    Как обычно для 100, 1000 и 3000 цифр. Версия для Коммодора считает до 7680 цифр, а для Амстрада до 5536 в бейсике. Кроме того есть сырая версия для Амстрада в СР/М, которая досчитала до 8500 цифр, но может и немного побольше.

    Чтобы совсем не пишнуться решил покинуть эту приятную тему. Может через месяц посмотрю, что тут случилось. Может появятся и результаты по БК, Спектрумам или даже лучшему домашнему ПК СССР Поиску? Успехов всем в пи-строительстве!
    Цитата Сообщение от ivagor Посмотреть сообщение
    Какой сильный перекос для 100 и 1000 цифр. То ли умножение на 10000 сказывается, то ли вывод на экран, но ПК-6128Ц и вектор с z80 считают 100 цифр быстрее, а 1000 медленнее.
    Конечно, вывод на экран. Под СР/М он ещё раз в 10 (!) медленнее. Зато там можно перенаправить вывод в файл как в ДОСе или Юниксе.
    Если хотите сами проверить, то скачайте эмулятор, подсоедините диск и командой RUN"PI проверяйте. Выход в СР/М командой |CPM, но нужен системный диск.
    Для Коммодора нужны две команды DLOAD"PI* и RUN

    Цитата Сообщение от ivagor Посмотреть сообщение
    Посчитать можно, а как их контролировать? На экран вектора в 512x256 одновременно можно вывести 5376 символов 4x6 (надо еще написать процедуру вывода). Выводить с прокруткой, сохранять на диск?
    По последним цифрам. Алгоритм таков, что сбой накапливается. Для больших чисел можно и на диск сбрасывать. Дело автора.

    Цитата Сообщение от perestoronin Посмотреть сообщение
    А можно еще, just for fun, вывести двоичное представление числа Пи в прямоугольную область в правом верхнем углу экрана, и рядом ниже выводить посчитанное по тестируемому алгоритму, глаз обычно у всех алмаз, сразу увидит где пиксели различаются.
    Круто! Но в некоторых системах есть текстовые режимы...
    Последний раз редактировалось litwr; 08.01.2016 в 11:19.

  11. #250

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

    По умолчанию

    Цитата Сообщение от litwr Посмотреть сообщение
    Но в некоторых системах есть текстовые режимы
    Для таких случаев вполне сгодится сравнение sha256sum с эталоном.

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

    Цитата Сообщение от litwr Посмотреть сообщение
    Вот код для истории
    Листинг бы продублировать и в виде вложения. Для удобства.

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

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

Страница 25 из 34 ПерваяПервая ... 212223242526272829 ... ПоследняяПоследняя

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

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

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

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

Ваши права

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