Alex_K, Процессор 1801ВМ1 с драйвером EM.SYS тоже может FIS.
Alex_K, Процессор 1801ВМ1 с драйвером EM.SYS тоже может FIS.
По аналогии с программой проверки разрядности мантиссы, предложенной nzeemin, написана программа выводящая результаты каждой итерации:
Неприятным моментом стало то, что Паскаль при выводе вещественных чисел, после запятой выводит только шесть десятичных разрядов, если число больше единицы, а вот если меньше, то уже все. Поэтому и сделан вывод Y-X, где X=1.0, чтобы полностью посмотреть все числа за запятой.Код:program MANTP; var X,Y,E:real; N:integer; begin X:=1.0; E:=1.0; N:=0; repeat E:=E/2.0; Y:=X+E; N:=N+1; writeln('E=',E:12:10,' Y=',Y:12:10,(Y-X):12:10,' N=',N:2); until Y=1.0 end.
Программа запускалась на эмуляторе ДВК Patron-а в конфигурациях с процессорами 1801ВМ1 (используется эмулятор FIS Паскаля) и 1801ВМ2 (используется эмулятор в ПЗУ 1801РЕ2-055). Также была запущена на УКНЦ (эмулятор в ПЗУ УКНЦ). В эмуляторе EmuStudio Союз-Неон Titus-а оценить не удалось, т.к. там не сделана эмуляция вызова команд FIS по вектору SEL010, хотя в EmuStudio УКНЦ это реализовано. Надеюсь автор исправит недочет и мы сможем оценить эмулятор FIS в ПЗУ Союз-Неон.
Ну теперь собственно результаты, они везде одинаковые:
Весьма интересна итерация с номером 24. Там при сложении X+E возникает момент, что результат не помещается в 23 разряда мантиссы, а выпадающий 24-й разряд равен единице и все эмуляторы делают "округление" в большую сторону, вот потому и получается в результате 25.Код:E= 0.5000000000 Y= 1.5000000000 0.5000000000 N= 1 E= 0.2500000000 Y= 1.2500000000 0.2500000000 N= 2 E= 0.1250000000 Y= 1.1250000000 0.1250000000 N= 3 E= 0.0625000000 Y= 1.0625000000 0.0625000000 N= 4 E= 0.0312500000 Y= 1.0312500000 0.0312500000 N= 5 E= 0.0156250000 Y= 1.0156250000 0.0156250000 N= 6 E= 0.0078125000 Y= 1.0078130000 0.0078125000 N= 7 E= 0.0039062500 Y= 1.0039060000 0.0039062500 N= 8 E= 0.0019531250 Y= 1.0019530000 0.0019531250 N= 9 E= 0.0009765625 Y= 1.0009770000 0.0009765625 N=10 E= 0.0004882813 Y= 1.0004880000 0.0004882813 N=11 E= 0.0002441406 Y= 1.0002440000 0.0002441406 N=12 E= 0.0001220703 Y= 1.0001220000 0.0001220703 N=13 E= 0.0000610352 Y= 1.0000610000 0.0000610352 N=14 E= 0.0000305176 Y= 1.0000310000 0.0000305176 N=15 E= 0.0000152588 Y= 1.0000150000 0.0000152588 N=16 E= 0.0000076294 Y= 1.0000080000 0.0000076294 N=17 E= 0.0000038147 Y= 1.0000040000 0.0000038147 N=18 E= 0.0000019073 Y= 1.0000020000 0.0000019073 N=19 E= 0.0000009537 Y= 1.0000010000 0.0000009537 N=20 E= 0.0000004768 Y= 1.0000000000 0.0000004768 N=21 E= 0.0000002384 Y= 1.0000000000 0.0000002384 N=22 E= 0.0000001192 Y= 1.0000000000 0.0000001192 N=23 E= 0.0000000596 Y= 1.0000000000 0.0000001192 N=24 E= 0.0000000298 Y= 1.0000000000 0.0000000000 N=25
Хотелось, чтобы программу запустили на аппаратной реализации FIS, например на "Электронике-60", неплохо бы и на LSI-11.
- - - Добавлено - - -
Попробовал и с ним, результат программы MANTP аналогичный, как и в других случаях.
Последний раз редактировалось Alex_K; 21.05.2016 в 22:03.
По аналогии с программой на Паскале, соответственно две программы на Си - для одинарной и двойной точности:
Код:$$narg=1; #include <stdio.h> main() { float X=1.0, Y=2.0, E=1.0; int N=0; do { E=E/2.0; Y=X+E; N++; printf("E=%12.10f Y=%12.10f %12.10f N=%2d\n",E,Y,Y-1.0,N); } while(Y!=1.0); }Хотя такой проблемы с выводом количества значащих разрядов после запятой, как на Паскале, в Си не оказалось, но концепция вывода осталась той же. Так как техники с аппаратной реализацией FP-11 не оказалось, то пришлось довольствоваться эмулятором FP-11 в самом Си.Код:$$narg=1; #include <stdio.h> main() { double X=1.0, Y=2.0, E=1.0; int N=0; do { E=E/2.0; Y=X+E; N++; printf("E=%22.20f Y=%22.20f %22.20f N=%2d\n",E,Y,Y-1.0,N); } while(Y!=1.0); }
Одинарная точность:
Двойная точность:Код:E=0.5000000000 Y=1.5000000000 0.5000000000 N= 1 E=0.2500000000 Y=1.2500000000 0.2500000000 N= 2 E=0.1250000000 Y=1.1250000000 0.1250000000 N= 3 E=0.0625000000 Y=1.0625000000 0.0625000000 N= 4 E=0.0312500000 Y=1.0312500000 0.0312500000 N= 5 E=0.0156250000 Y=1.0156250000 0.0156250000 N= 6 E=0.0078125000 Y=1.0078125000 0.0078125000 N= 7 E=0.0039062500 Y=1.0039062500 0.0039062500 N= 8 E=0.0019531250 Y=1.0019531250 0.0019531250 N= 9 E=0.0009765625 Y=1.0009765625 0.0009765625 N=10 E=0.0004882813 Y=1.0004882813 0.0004882813 N=11 E=0.0002441406 Y=1.0002441406 0.0002441406 N=12 E=0.0001220703 Y=1.0001220703 0.0001220703 N=13 E=0.0000610352 Y=1.0000610352 0.0000610352 N=14 E=0.0000305176 Y=1.0000305176 0.0000305176 N=15 E=0.0000152588 Y=1.0000152588 0.0000152588 N=16 E=0.0000076294 Y=1.0000076294 0.0000076294 N=17 E=0.0000038147 Y=1.0000038147 0.0000038147 N=18 E=0.0000019073 Y=1.0000019073 0.0000019073 N=19 E=0.0000009537 Y=1.0000009537 0.0000009537 N=20 E=0.0000004768 Y=1.0000004768 0.0000004768 N=21 E=0.0000002384 Y=1.0000002384 0.0000002384 N=22 E=0.0000001192 Y=1.0000001192 0.0000001192 N=23 E=0.0000000596 Y=1.0000000000 0.0000000000 N=24
Ну как видно по результатам одинарной точности, эмулятор FP-11 в Си никакого "округления" не делает, вот и получается 24 итерации вместо 25.Код:E=0.50000000000000000000 Y=1.50000000000000000000 0.50000000000000000000 N= 1 E=0.25000000000000000000 Y=1.25000000000000000000 0.25000000000000000000 N= 2 E=0.12500000000000000000 Y=1.12500000000000000000 0.12500000000000000000 N= 3 E=0.06250000000000000000 Y=1.06250000000000000000 0.06250000000000000000 N= 4 E=0.03125000000000000000 Y=1.03125000000000000000 0.03125000000000000000 N= 5 E=0.01562500000000000000 Y=1.01562500000000000000 0.01562500000000000000 N= 6 E=0.00781250000000000000 Y=1.00781250000000000000 0.00781250000000000000 N= 7 E=0.00390625000000000000 Y=1.00390625000000000000 0.00390625000000000000 N= 8 E=0.00195312500000000000 Y=1.00195312500000000000 0.00195312500000000000 N= 9 E=0.00097656250000000000 Y=1.00097656250000000000 0.00097656250000000000 N=10 E=0.00048828125000000000 Y=1.00048828125000000000 0.00048828125000000000 N=11 E=0.00024414062500000000 Y=1.00024414062500000000 0.00024414062500000000 N=12 E=0.00012207031250000000 Y=1.00012207031250000000 0.00012207031250000000 N=13 E=0.00006103515625000000 Y=1.00006103515625000000 0.00006103515625000000 N=14 E=0.00003051757812500000 Y=1.00003051757812500000 0.00003051757812500000 N=15 E=0.00001525878906250000 Y=1.00001525878906250000 0.00001525878906250000 N=16 E=0.00000762939453125000 Y=1.00000762939453125000 0.00000762939453125000 N=17 E=0.00000381469726562500 Y=1.00000381469726562500 0.00000381469726562500 N=18 E=0.00000190734863281250 Y=1.00000190734863281250 0.00000190734863281250 N=19 E=0.00000095367431640625 Y=1.00000095367431640625 0.00000095367431640625 N=20 E=0.00000047683715820313 Y=1.00000047683715820313 0.00000047683715820313 N=21 E=0.00000023841857910156 Y=1.00000023841857910156 0.00000023841857910156 N=22 E=0.00000011920928955078 Y=1.00000011920928955078 0.00000011920928955078 N=23 E=0.00000005960464477539 Y=1.00000005960464477539 0.00000005960464477539 N=24 E=0.00000002980232238770 Y=1.00000002980232238770 0.00000002980232238770 N=25 E=0.00000001490116119385 Y=1.00000001490116119385 0.00000001490116119385 N=26 E=0.00000000745058059692 Y=1.00000000745058059692 0.00000000745058059692 N=27 E=0.00000000372529029846 Y=1.00000000372529029846 0.00000000372529029846 N=28 E=0.00000000186264514923 Y=1.00000000186264514923 0.00000000186264514923 N=29 E=0.00000000093132257462 Y=1.00000000093132257462 0.00000000093132257462 N=30 E=0.00000000046566128731 Y=1.00000000046566128731 0.00000000046566128731 N=31 E=0.00000000023283064365 Y=1.00000000023283064365 0.00000000023283064365 N=32 E=0.00000000011641532183 Y=1.00000000011641532183 0.00000000011641532183 N=33 E=0.00000000005820766091 Y=1.00000000005820766091 0.00000000005820766091 N=34 E=0.00000000002910383046 Y=1.00000000002910383046 0.00000000002910383046 N=35 E=0.00000000001455191523 Y=1.00000000001455191523 0.00000000001455191523 N=36 E=0.00000000000727595761 Y=1.00000000000727595761 0.00000000000727595761 N=37 E=0.00000000000363797881 Y=1.00000000000363797881 0.00000000000363797881 N=38 E=0.00000000000181898940 Y=1.00000000000181898940 0.00000000000181898940 N=39 E=0.00000000000090949470 Y=1.00000000000090949470 0.00000000000090949470 N=40 E=0.00000000000045474735 Y=1.00000000000045474735 0.00000000000045474735 N=41 E=0.00000000000022737368 Y=1.00000000000022737368 0.00000000000022737368 N=42 E=0.00000000000011368684 Y=1.00000000000011368684 0.00000000000011368684 N=43 E=0.00000000000005684342 Y=1.00000000000005684342 0.00000000000005684342 N=44 E=0.00000000000002842171 Y=1.00000000000002842171 0.00000000000002842171 N=45 E=0.00000000000001421085 Y=1.00000000000001421085 0.00000000000001421085 N=46 E=0.00000000000000710543 Y=1.00000000000000710543 0.00000000000000710543 N=47 E=0.00000000000000355271 Y=1.00000000000000355271 0.00000000000000355271 N=48 E=0.00000000000000177636 Y=1.00000000000000177636 0.00000000000000177636 N=49 E=0.00000000000000088818 Y=1.00000000000000088818 0.00000000000000088818 N=50 E=0.00000000000000044409 Y=1.00000000000000044409 0.00000000000000044409 N=51 E=0.00000000000000022204 Y=1.00000000000000022204 0.00000000000000022204 N=52 E=0.00000000000000011102 Y=1.00000000000000011102 0.00000000000000011102 N=53 E=0.00000000000000005551 Y=1.00000000000000005551 0.00000000000000005551 N=54 E=0.00000000000000002776 Y=1.00000000000000002776 0.00000000000000002776 N=55 E=0.00000000000000001388 Y=1.00000000000000000000 0.00000000000000000000 N=56
Ну и по поводу запуска на аппаратной реализации FP-11, большая просьба к form запустить на PDP-11 c J-11, и к MiX на связке 1801ВМ3+1801ВМ4.
Далее выложу исходники и исполнимые модули для запуска в RT-11.
- - - Добавлено - - -
Собственно архив с исходниками на Паскале и Си и исполнимые модули для RT-11.
Ну не знаю, насколько одинаковая. Но в EmuStudio УКНЦ даже RESORC по команде SHOW CONF показывает, что есть набор FIS, да и после команды D 10=12,0 и запуска MANTP в пульт не вылетает. А вот в EmuStudio ПК-11 показывается, что есть только EIS, да и после D 10=12,0 и запуска MANTP происходит вылет в пульт.
Последний раз редактировалось Alex_K; 22.05.2016 в 00:31.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
ВМ3+ВМ4
MANF не запустился. Будет время, на J11 запущу.Код:.MANTP E= 0.5000000000 Y= 1.5000000000 0.5000000000 N= 1 E= 0.2500000000 Y= 1.2500000000 0.2500000000 N= 2 E= 0.1250000000 Y= 1.1250000000 0.1250000000 N= 3 E= 0.0625000000 Y= 1.0625000000 0.0625000000 N= 4 E= 0.0312500000 Y= 1.0312500000 0.0312500000 N= 5 E= 0.0156250000 Y= 1.0156250000 0.0156250000 N= 6 E= 0.0078125000 Y= 1.0078130000 0.0078125000 N= 7 E= 0.0039062500 Y= 1.0039060000 0.0039062500 N= 8 E= 0.0019531250 Y= 1.0019530000 0.0019531250 N= 9 E= 0.0009765625 Y= 1.0009770000 0.0009765625 N=10 E= 0.0004882813 Y= 1.0004880000 0.0004882813 N=11 E= 0.0002441406 Y= 1.0002440000 0.0002441406 N=12 E= 0.0001220703 Y= 1.0001220000 0.0001220703 N=13 E= 0.0000610352 Y= 1.0000610000 0.0000610352 N=14 E= 0.0000305176 Y= 1.0000310000 0.0000305176 N=15 E= 0.0000152588 Y= 1.0000150000 0.0000152588 N=16 E= 0.0000076294 Y= 1.0000080000 0.0000076294 N=17 E= 0.0000038147 Y= 1.0000040000 0.0000038147 N=18 E= 0.0000019073 Y= 1.0000020000 0.0000019073 N=19 E= 0.0000009537 Y= 1.0000010000 0.0000009537 N=20 E= 0.0000004768 Y= 1.0000000000 0.0000004768 N=21 E= 0.0000002384 Y= 1.0000000000 0.0000002384 N=22 E= 0.0000001192 Y= 1.0000000000 0.0000001192 N=23 E= 0.0000000596 Y= 1.0000000000 0.0000001192 N=24 E= 0.0000000298 Y= 1.0000000000 0.0000000000 N=25 .MANTP E= 0.5000000000 Y= 1.5000000000 0.5000000000 N= 1 E= 0.2500000000 Y= 1.2500000000 0.2500000000 N= 2 E= 0.1250000000 Y= 1.1250000000 0.1250000000 N= 3 E= 0.0625000000 Y= 1.0625000000 0.0625000000 N= 4 E= 0.0312500000 Y= 1.0312500000 0.0312500000 N= 5 E= 0.0156250000 Y= 1.0156250000 0.0156250000 N= 6 E= 0.0078125000 Y= 1.0078130000 0.0078125000 N= 7 E= 0.0039062500 Y= 1.0039060000 0.0039062500 N= 8 E= 0.0019531250 Y= 1.0019530000 0.0019531250 N= 9 E= 0.0009765625 Y= 1.0009770000 0.0009765625 N=10 E= 0.0004882813 Y= 1.0004880000 0.0004882813 N=11 E= 0.0002441406 Y= 1.0002440000 0.0002441406 N=12 E= 0.0001220703 Y= 1.0001220000 0.0001220703 N=13 E= 0.0000610352 Y= 1.0000610000 0.0000610352 N=14 E= 0.0000305176 Y= 1.0000310000 0.0000305176 N=15 E= 0.0000152588 Y= 1.0000150000 0.0000152588 N=16 E= 0.0000076294 Y= 1.0000080000 0.0000076294 N=17 E= 0.0000038147 Y= 1.0000040000 0.0000038147 N=18 E= 0.0000019073 Y= 1.0000020000 0.0000019073 N=19 E= 0.0000009537 Y= 1.0000010000 0.0000009537 N=20 E= 0.0000004768 Y= 1.0000000000 0.0000004768 N=21 E= 0.0000002384 Y= 1.0000000000 0.0000002384 N=22 E= 0.0000001192 Y= 1.0000000000 0.0000001192 N=23 E= 0.0000000596 Y= 1.0000000000 0.0000001192 N=24 E= 0.0000000298 Y= 1.0000000000 0.0000000000 N=25
- - - Добавлено - - -
Нет инструкций FIS. Надо бы прошивку проверить, может там и нет эмуляции FIS.
- - - Добавлено - - -
По поводу разбора прошивки это у меня к Alex_K просьба.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)