![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Сделал питоновский скрипт для забав с вещественными значеними БЭСМ-6. Конвертирует восьмеричное представление в вещественное и обратно.
https://github.com/besm6/besm6.github.io/blob/master/wiki/examples/besmword
Пробуем небольшие числа:
Формат представления чисел БЭСМ-6 описан здесь: http://www.besm6.org/wiki/Numbers
https://github.com/besm6/besm6.github.io/blob/master/wiki/examples/besmword
Пробуем небольшие числа:
$ besmword 1.0 1.0 = 4050 0000 0000 0000 $ besmword 2.0 2.0 = 4110 0000 0000 0000 $ besmword 3.0 3.0 = 4114 0000 0000 0000 $ besmword 5.0 5.0 = 4152 0000 0000 0000 $ besmword 7.0 7.0 = 4156 0000 0000 0000 $ besmword -1.0 -1.0 = 4020 0000 0000 0000 $ besmword -2.0 -2.0 = 4060 0000 0000 0000 $ besmword -3.0 -3.0 = 4124 0000 0000 0000 $ besmword -5.0 -5.0 = 4166 0000 0000 0000 $ besmword -7.0 -7.0 = 4162 0000 0000 0000FLT_MAX: максимальные положительное и отрицательное вещественные числа.
$ besmword 7757777777777777 7757 7777 7777 7777 = 9.2233720368464e+18 $ besmword 7760000000000000 7760 0000 0000 0000 = -9.2233720368548e+18FLT_MIN: наименьшие положительное и отрицательное вещественные числа.
$ besmword 0010000000000000 0010 0000 0000 0000 = 2.7105054312138e-20 $ besmword 0027777777777777 0027 7777 7777 7777 = -2.7105054312187e-20Нащупываем FLT_EPSILON: дискретность представления вещественных чисел.
$ besmword 4050000000000000 4050 0000 0000 0000 = 1 $ besmword 4050000000000001 4050 0000 0000 0001 = 1.0000000000018То есть epsilon = 1.0000000000018 - 1.0 = 1.8e-12. Для сравнения: 1.2e-07 для 32-битного float и 2.2e-16 для 64-битного double.
Формат представления чисел БЭСМ-6 описан здесь: http://www.besm6.org/wiki/Numbers
no subject
Date: 2019-04-03 16:22 (UTC)Cейчас заметил, что появилась реализация команд сложения в АЛУ mesm6. Из Вашего скрипта позаимствовал процедуру вывода числа БЭСМ через ldexp. Удобные функции, не знал, что такие есть в стандартной библиотеке. Отсюда отвлеченный вопрос: при заимствовании отдельных функций необходимо ли копировать шапку с лицензией из Вашего скрипта?
По ходу работы возникали вопросы, попробую сейчас найти ответы в коде Леонида и внести правки.
no subject
Date: 2019-04-03 20:53 (UTC)Зато заработал паскалевский тест hello.pas. Успешно печатает строку "HELLO, WORLD!" и корректно завершается. Теперь можно писать более сложные тесты прямо на Паскале.
При простом заимствовании идей или пары строчек кода наследовать копирайт не обязательно. А сами функции ldexp и frexp имеют долгую историю. Они появились ещё в ранних версиях Unix v7.
https://github.com/v7unix/v7unix/blob/master/v7/usr/src/libc/gen/ldexp11.s
https://github.com/v7unix/v7unix/blob/master/v7/usr/src/libc/gen/frexp11.s
no subject
Date: 2019-04-05 04:56 (UTC)Скоро можно будет и мониторной системой заняться (с реализацией экстракодов ввода/вывода).
no subject
Date: 2019-04-05 05:11 (UTC)https://github.com/besm6/mesm6/blob/master/model/besm6_chsign.py
Кстати, сложение-вычитание работает несколько не так, как в скрипте. При инвертировании (перед сложением) не делается сдвиг мантиссы вправо. Числа складываются как есть, без сдвига. Проверка и "нормализация вправо" выполняются уже над результатом, если знаковые биты не совпадают. А если нормализация заблокирована, этого не происходит.
Имитировать экстракоды как в Диспаке нам в долгосрочном плане не нужно. Достаточно переписать рантайм библиотеку Паскаля в более современном виде. Я собираюсь дизассемблировать библиотеку, сложить её на Гитхаб, и мы сможем приспосабливать её под наши ардуинные нужды.
Ещё одна большая задача - поправить исходники компилятора Паскаль-Монитор, чтобы он собирался в кросс-режиме с помощью Free Pascal. Я начал его править, добился трансляции первых 600 строчек. Уже видно, что задача вполне посильная.