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

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

Когда я писал заметку о точном представлении чисел, я вдруг обнаружил, что не понимаю формулу расчета точности для умножения. Например, число из 2 знакомест (N1 = 2, max 99) умножается на число из 3 знакомест (N2 = 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.08.26, последняя правка: 2019.01.28    20:37

ОценитеОценки посетителей
   ██████████████████████████████████████████ 1 (100%)
   ▌ 0
   ▌ 0
   ▌ 0

Отзывы

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

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

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

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

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

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

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

Добавить свой отзыв

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

Авторизация

Регистрация

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

Карта сайта


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

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

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

Компилятор

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

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

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

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

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

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

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

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

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

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

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

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

Программисты-профессионалы и программирующие инженеры

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

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

●  В защиту PL/1

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

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

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

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

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

●  О размещении переменных в стеке

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

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

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

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

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

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

●  Об одной реализации специализированных операторов ввода-вывода

●  Особенности реализации структурной обработки исключений в Win64

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

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

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

●  Заметки о выходе из функции без значения и зеркальности get и put

●  Ошибка при отсутствии выполняемых действий

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

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

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

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

Новости и прочее

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

2019/04/19 11:25 ••• kt
Почему языки с синтаксисом Си популярнее языков с синтаксисом Паскаля?

2019/04/14 22:15 ••• MihalNik
К вопросу о совершенствовании языка программирования

2019/04/03 22:24 ••• Антон
Все голосования

2019/04/02 12:28 ••• Автор сайта
Шестнадцатиричные и двоичные константы

2019/04/02 12:25 ••• Автор сайта
Выбор кодировки для компилятора

2019/03/26 23:07 ••• Автор сайта
Обработка ошибок

2019/03/24 14:55 ••• Автор сайта
Реализация двухстековой модели размещения данных

2019/03/23 19:01 ••• Автор сайта
Размещение объектов переменной длины с использованием множества стеков

2019/03/20 14:37 ••• rst256
Реализация параметрического полиморфизма

2019/02/24 23:14 ••• MihalNik
Каким должен быть язык программирования?

2019/02/20 14:09 ••• Автор сайта
Ошибка при отсутствии выполняемых действий

2019/02/16 14:52 ••• kt
Заметки о выходе из функции без значения и зеркальности get и put