|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Author |
Message |
Клапауций
Banned
Joined: 29 Jun 2018 08:48 Posts: 413
|
результат тестов: сообщение об ошибке ссылается на эту программу теста: вначале огорчился, что функции SIN, COS таки не исправились, но всё не так как на самом деле... если посмотреть в комментах https://gitlab.com/nedopc/mk85/blob/mas ... e/mk85.src формулы вычисления SIN, COS через TAN и попробовать вычислить в режиме калькулятора , например DEG TAN(1e-2047)^2, то - таки, ERR3. т.е. это не разрушающий баг, а фича формулы вычисления SIN, COS и сабж адекватно на неё реагирует, воспроизводя сообщение об ошибке, что результат вычислений превысил допустимые границы представления чисел. ~~~~~~~~~~~~~~~~~~~~~~~ итого в сухом остатке: 32-х летний баг ликвидирован. всем спасибо. я счастлив. ~~~~~~~~~~~~~~~~~~~~~~~
|
14 Aug 2018 20:53 |
|
|
Клапауций
Banned
Joined: 29 Jun 2018 08:48 Posts: 413
|
да, и забыл пока тестил главное - запуск TEST вызывает сообщение "Дефект ПЗУ". особо не принципиально, но... не окей.
|
14 Aug 2018 21:38 |
|
|
piotr433
Novelist
Joined: 14 Aug 2018 14:30 Posts: 49 Location: Szczecin, Польша
|
Я забыл обновить контрольную сумму. Исправил, файл rom_image.zip обновлён. Спасибо за проверку!
|
14 Aug 2018 22:12 |
|
|
Клапауций
Banned
Joined: 29 Jun 2018 08:48 Posts: 413
|
|
14 Aug 2018 22:55 |
|
|
Клапауций
Banned
Joined: 29 Jun 2018 08:48 Posts: 413
|
пока народ не разбежался - есть ещё вопрос:
претензии чисто косметического характера.
делаем 0.001 EXE - результат: 0.001 делаем 0.0001 EXE - результат: 1e-4
вопрос: почему результат выполнения 0.1 EXE не 1e-1 ? или почему результат выполнения 0.000000001 EXE не 0.000000001 ?
в чём сакральная суть перехода на формат 1e-x представления числа начиная с x>3, а не сразу или когда число перестаёт помещаться в экран?
|
15 Aug 2018 02:42 |
|
|
Клапауций
Banned
Joined: 29 Jun 2018 08:48 Posts: 413
|
piotr433, Shaos, нужно где-то опубликовать исправленную версию ROM. с подробным описанием исправленного. т.к. баг довольно критический и подозреваю, что многие на него наступали, но не понимали, что вообще происходит.
|
15 Aug 2018 18:22 |
|
|
piotr433
Novelist
Joined: 14 Aug 2018 14:30 Posts: 49 Location: Szczecin, Польша
|
К сожалению, моя модификация портит функцию EXP Я ещё подумаю.
|
16 Aug 2018 03:11 |
|
|
Клапауций
Banned
Joined: 29 Jun 2018 08:48 Posts: 413
|
ок. не буду мешать.
|
16 Aug 2018 03:45 |
|
|
piotr433
Novelist
Joined: 14 Aug 2018 14:30 Posts: 49 Location: Szczecin, Польша
|
Кстати, с оригинальным ПЗУ, функция ATN тоже выдаёт неправильные результаты для аргументов < ±1E-127
|
16 Aug 2018 13:29 |
|
|
Клапауций
Banned
Joined: 29 Jun 2018 08:48 Posts: 413
|
дело в том, что мой тест проверяет не правильность вычислений, а катастрофическое поведение сабжа визуально - зависание, перезагрузка, ошибки. этот тест функция ATN проходит. для проверки правильности вычислений нужно дописать в эмулятор подключение к эталонному программному вычислителю и сравнивать, переменную B из теста с external_B вычислителя. или иначе, что бы вызов из консоли возвращал результат ATN(1e-127) вычисленный эмулятором. тогда будет проще работать с эталонным вычислителем.
|
16 Aug 2018 18:40 |
|
|
piotr433
Novelist
Joined: 14 Aug 2018 14:30 Posts: 49 Location: Szczecin, Польша
|
Может так будет лучше: Попытаюсь дописать.
|
16 Aug 2018 21:39 |
|
|
Клапауций
Banned
Joined: 29 Jun 2018 08:48 Posts: 413
|
что бы особо не заморачиваться - пусть PRINT просто печатает в текстовый файл print.txt, лежащий в папке с исполняемым файлом эмулятора, где CSR будет указывать - с какого места новой строки печатать, если CSR не выполняется, то - печатать всё подряд.
|
16 Aug 2018 22:35 |
|
|
Клапауций
Banned
Joined: 29 Jun 2018 08:48 Posts: 413
|
ок. спасибо. на первый взгляд - всё хорошо. *тут ещё проблема найти эталонный вычислитель, т.к. виндовый дефолтный калькулятор делает градус sin(1e-200) = 0 поэтому, прошу пока подаяний на паперти http://www.wolframalpha.com
|
16 Aug 2018 23:47 |
|
|
piotr433
Novelist
Joined: 14 Aug 2018 14:30 Posts: 49 Location: Szczecin, Польша
|
Я всё-таки решил сделать это ещё раз по-другому. Недостатки оригинального кода в диапазоне адресов 0x3A30-0x3AA2 возникают из-за хранения двух информации в одном регистре R1: 1. бит 15 - флаг требования дополнительного сдвига на одну цифру 2. младший байт - количество сдвигов на две цифры (здесь наступает переполнение) Я переписал всю проблематическую подпрограмму. Приведённая модификация хранит количество сдвигов в полном 16-битном регистре R1, а флаг хранится на стеке. | | | | Code: ; function used by the EXP and LN procedures, M=B*10^(-J+offset) sub #7,r5 ;r5 points to the multiplicand B mov r5,r2 sub #8,r2 ;r2 points to the modifier M movb (sp),r1 ;iteration counter J sub 10(sp),r1 ;offset to the table of constants asr r1 ror -(sp) ;mark odd (-J+offset) ; M = B/10^(2*r1) L3A48: mov #8,r0 L3A4C: tst r1 ble L3A54 clrb (r2) br L3A62 L3A54: movb (r5),(r2) dec r5 bit #1,r5 beq L3A62 add #4,r5 L3A62: dec r2 bit #1,r2 beq L3A6E add #4,r2 L3A6E: dec r1 sob r0,L3A4C ; tst (sp)+ bpl L3A8A ;skip if (-J+offset) is even ; M = M/10 dec r2 mov #4,r0 L3A7C: sub #8,r2 ror (r2)+ ror (r2)+ ror (r2)+ ror (r2)+ sob r0,L3A7C ; L3A8A: mov r3,r5 sub #A,r5 jmp @(r4)+
; function used by the TAN and ATN procedures, M=A*10^(-2*J+offset) add #3,r5 mov r5,r2 sub #12,r2 movb (sp),r1 ;iteration counter J sub 10(sp),r1 ;offset to the table of constants clr -(sp) br L3A48 | | | | |
Но это не будет просто. Эмулятор ничего не знает про команды Бейсика PRINT или CSR, может лишь нажимать кнопки, записывать и читать память (например буфер строковой переменной $), перехватить данные для контроллера ЖКИ. Для малых величин X, sin(X) = X и tan(X) = X (в радианах). Ой, прошу пояснения.
Last edited by piotr433 on 17 Aug 2018 11:30, edited 2 times in total.
|
17 Aug 2018 08:06 |
|
|
Клапауций
Banned
Joined: 29 Jun 2018 08:48 Posts: 413
|
понятно. спасибо за развёрнутый ответ о причине бага и способе его решения. ок. ну, тогда ничего сделать и не получится - если эмулятор управляет чёрным ящиком. и, в радианах майкрософт считает 1e-200 достаточно малой величиной, что бы приравнивать её к 0. там у них считается всё коммерческим и если проявлять чрезмерную активность запросов, то они ничего не говорят, а начинают сокращать варианты выдаваемых ответов. поэтому я стараюсь не наглеть.
|
17 Aug 2018 10:51 |
|
|
Who is online |
Users browsing this forum: No registered users and 2 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|