Аттракцион повышенной точности

Jun 19, 2024 10:50

Когда в 1967 году советским вычислительным математикам досталась очень большая (аж до 192 Кб адресуемой памяти, на более ранних, которые они могли видеть, было меньше 50 Кб) очень быстрая (аж до миллиона операций в секунду, на более ранних - не больше 50 тысяч) вычислительная машина, они тут же захотели сделать себе библиотеку программ, полезных ( Read more... )

retrocomputing

Leave a comment

Comments 35

maksa June 19 2024, 18:13:38 UTC
(Глупость, наверное, сейчас спрошу.)

изменять работу с адресами переменных и индексов массивов, или программа сама выбирала в буферной памяти, где хранить "хвосты" переменных

А могло быть так, чтобы этой программой создавались новые, дублирующие переменные и массивы, которые дружно хранились в отдельном уголке памяти?

Reply

spamsink June 19 2024, 18:22:45 UTC
Могло, конечно, если памяти было не жалко (обычно для удвоенной точности потребность в памяти для данных увеличивается вдвое, а с этим способом будет втрое).
Разбираться надо, а там примерно полторы тысячи команд, если я правильно подсчитал.

Reply

spamsink June 19 2024, 21:49:47 UTC
Я разобрался (нашлась книжка 1967 года с подробной инструкцией).
Память должен был отводить сам программист, а интерпретатору указывалось смещение между основной ячейкой и ячейками хвоста переменной.
Т.е. если программист знает, что ему понадобится в общей сложности 42 вещественных значения, и он хочет считать с утроенной точностью, он отводит 126 слов, обращается в своей программе к первым 42 словам, а интерпретатору указывает смещение 42. И у переменной с адресом А отрастал хвост в словах с адресами А+42 и А+84.

Reply

maksa June 19 2024, 22:02:36 UTC
Не уверен, что смог понять. Программист - той программы, для которой можно потом увеличить точность? Значит ли это, что каждая такая программа должна быть написана определённым образом, чтобы быть готовой к запуску с повышенной точностью? То есть, память для плавающих переменных должна отводиться определённым образом?

Reply


p2004r June 19 2024, 18:54:13 UTC
Интересно традиция "листинги с опечатками" стала традицией уже тогда... или это потом п...ы всякие придумали?

Reply

spamsink June 19 2024, 19:07:35 UTC
Я не знаю такую традицию :(

Reply

p2004r June 20 2024, 18:36:29 UTC

О... это с середины 70х пошло во всех книжках с листингами... ни одного без "опечатки" не попадалось.

Reply

spamsink June 20 2024, 19:13:45 UTC
Защита от копирования такая защита.

Reply


xxxxx June 19 2024, 20:47:18 UTC
от слияния до упорядочивания в общем-то один шаг

Reply

spamsink June 19 2024, 21:53:21 UTC
Это было бы логично, но нет: я сейчас глянул в код, и программа сортировки программу слияния не вызывает. Оно и правильно, пожалуй, т. к. накладные расходы на вызов довольно существенные.

Reply

xxxxx June 20 2024, 00:33:38 UTC
Ну так иф б-а < скажем 3,4 или 5, то пузыримся например, а иначе таки рекурсимся и сливаемся. Я это дело на спектруме изучал, судя по вашему описанию схожая машина хоть и 15 лет разницы (годы ушли в цену и миниатюризацию)

Reply

spamsink June 20 2024, 00:49:25 UTC
С рекурсией в те годы было плохо, её не любили за "риск переполнения стека". Вот и сортировка эта, на 10 чисел [7, 1, 5, 10, 6, 8, 3, 4, 2, 9] уходит 2311 команды, на [7, 7, 1, 1, 5, 5, ...] - 4109, и так далее вплоть до 5 раз каждое число, соответственно 7007, 11005, 16103 команд. Итого, говорит Вольфрамальфа после cubic fit,
1613. + 148. x + 550. x^2 - 2.1705299929911876*^-12 x^3

Практический ноль у куба как бы намекает, что никакими дробными степенями или логарифмами даже и пахнуть не может. Оценим предиктивную силу формулы. Для числа повторений 10 должно получиться 58093 команды. Ровно столько и получается. Для числа повторений 100 и ожидаем, и видим 5516413. Увы, никаких трюков.

Reply


аж до 192 Кб адресуемой памяти alextr98 June 19 2024, 21:19:34 UTC
Адресовать можно было только 32 килослова - на адрес отводилось только 15 разрядов.
Ну, если разве что умножить 6 байтов в 48 разрядном слове на 32 - получится 192 КилоБайта, но на БЭСМ-6 в байтах же не считали.
Да и целая африметика была корявая - операции с целыми числами выполнялись путём отключения нормализации, а мантисса была такая же, как для чисел с плавающей точкой, то есть 8 разрядов пропадало зря при вычислениях целых чисел.

Reply

Re: аж до 192 Кб адресуемой памяти spamsink June 19 2024, 21:42:38 UTC
Всё это разумеется, но кто ж нынче в словах считает. В кб я для общепонятности написал.

8 разрядов пропадало зря при вычислениях целых чисел.

Ну пропадало, зато не надо было i2f делать перед операциями между плавающими и целыми (за исключением деления, которое ожидало нормализованный делитель).

Reply

Re: аж до 192 Кб адресуемой памяти alextr98 June 20 2024, 00:00:41 UTC
На проклятом западе айбиэмовцы уже всё делали в степени 2 - 8, 16, 32, 64 даже и 128.
А БЭСМовцы лепили что попало - 15 разрядов адрес, 24 разряда команда, 48 разрядов слово и так далее.
Интеллектуальная отсталость, короче.

Reply

Re: аж до 192 Кб адресуемой памяти spamsink June 20 2024, 00:24:10 UTC
Это не отсталость, а проблема кругозора.

На проклятом западе в то же время была PDP-10, выпущенная примерно тогда же, когда и БЭСМ-6, и выпускавшаяся почти столько же лет, сколько БЭСМ-6, со словом, даже не кратным 8 битам - 36 бит.

Reply


Leave a comment

Up