Каким должен быть язык программирования? Анализ и критика Описание языка Компилятор
Отечественные разработки Cтатьи на компьютерные темы Компьютерный юмор Прочее

Формула расчета точности для умножения

Когда я писал заметку о точном представлении чисел, я вдруг обнаружил, что не понимаю формулу расчета точности для умножения. Например, число из 2 знакомест (N1 = 2, max 99) умножается на число из 3 знакомест (N1 = 3 max 999). Результат умножения max 98901 и точность N1 + N2. А в справочнике расчет точности у компилятора PL/1 приведен как N1 + N2 + 1.

            Откуда еще один разряд? Я даже спрашивал у калифорнийских профессоров через Гугл-групп для PL/1: дескать, какого черта, ребята? Откуда там возьмется еще один перенос? Для других арифметических действий такого в справочнике нет.

            Сначала приходили ответы типа: как теперь узнать, что было в головах разработчиков 50 лет назад? Их уже не спросишь. Но затем пришел и правильный ответ: Вы забыли случай умножения целых комплексных чисел по формуле (a1 * a2 - b1 * b2) + (a1 * b2 + b1 * a2). Здесь потенциально возможен еще один перенос, а в остальных арифметических действиях – нет.

            Честно говоря, я был поражен. Так разработчики PL/1 – это просто гении! Мне бы и в голову не пришло, что при таких условиях возможен еще перенос. Правда, непонятно, зачем могли пригодиться целые комплексные?

            Попробовал копать на эту тему и вскоре выяснил следующее:

  • число гениев среди разработчиков PL/1 сильно преувеличено – это все взято их Фортрана;
  • целые комплексные числа применялись в электротехнических и радиотехнических расчетах, например, сопротивления цепей, где часты формулы типа 1 / R = 1 / R1 + 1 / R2;
  • потеря значащего значения произошла в реальной программе, после чего и было введено уточнение N1 + N2 + 1.


            Вывод: слова песни «мои года – мое богатство» – не пустое балагурство. За спиной давно используемых языков стоит огромное преимущество в виде многолетней обкатки на реальных задачах. Многие вещи очень трудно предугадать и предусмотреть на этапе разработки. Я горжусь 50-летним стажем PL/1 и его «обкатаностью» для задач инженерного типа. И именно поэтому сравниваю его с пистолетом Макарова, который победил конкурентов из-за бОльшего объема отстрелов. Кстати, через несколько лет и у Макарова выявился недостаток (ослабление пружины), который был оперативно устранен добавлением еще одного винта.

Автор: Д.Ю.Караваев.

Последняя правка: 2018-10-12    12:26

Оцените

Отзывы

     2018/10/11 22:29, Автор сайта

число гениев среди разработчиков PL/1 сильно преувеличено – это все взято их Фортрана

Первым делом я про Фортран и подумал. Кто настолько досконально знает математику? Профессор по математике! А на чём программировал профессор? На Фортране!

Я ещё застал этих профессоров. Думаю, Вы тоже.

слова песни «мои года – мое богатство» – не пустое балагурство

А есть такое балагурство :)

С возрастом приходит мудрость. Но иногда возраст приходит один.

Написать отзыв

Написать автору можно на электронную почту mail(аt)compiler.su

Авторизация

Регистрация

Выслать пароль

Карта сайта


Каким должен быть язык программирования?

Анализ и критика

Описание языка

Компилятор

Отечественные разработки

Cтатьи на компьютерные темы

Двадцать тысяч строк кода, которые потрясут мир?

Почему владение/заимствование в Rust такое сложное?

Масштабируемые архитектуры программ

Почему Хаскелл так мало используется в отрасли?

Бесплатный софт в мышеловке

Исповедь правового нигилиста

Русской операционной системой должна стать ReactOS

Почему обречён язык Форт

Программирование без программистов — это медицина без врачей

Электроника без электронщиков

Статьи Дмитрия Караваева

●  Идеальный транслятор

●  К вопросу о совершенствовании языка программирования

●  О реализации метода оптимизации при компиляции

●  О реализации метода распределения регистров при компиляции

●  О распределении памяти при выполнении теста Кнута

●  Опыты со стеком или «чемпионат по выполнению теста Кнута»

●  Сколько проходов должно быть у транслятора?

●  Чтение лексем

●  Экстракоды при синтезе программ

●  Об исключенных командах или за что «списали» инструкцию INTO?

●  Типы в инженерных задачах

●  Непрерывное компилирование

●  О русском языке в программировании

●  Формула расчета точности для умножения

●  Права доступа к переменным

●  Скорость в попугаях

●  Крах операции «Инкогнито»

●  Предопределенный результат

Компьютерный юмор

Прочее

Последние комментарии

2018/10/11 22:29, Автор сайта
Формула расчета точности для умножения

2018/10/08 14:00, Неслучайный читатель
Сколько проходов должно быть у транслятора?

2018/10/06 12:19, Автор сайта
Тексто-графическое представление программы

2018/10/04 17:39, Автор сайта
Об исключенных командах или за что «списали» инструкцию INTO?

2018/09/29 16:52, Автор сайта
Как отличить унарный минус от бинарного

2018/09/22 20:13, Д.Ю.Караваев
Идеальный транслятор

2018/09/22 12:32, Автор сайта
Типы в инженерных задачах

2018/09/22 12:20, Д.Ю.Караваев
О русском языке в программировании