Формула расчета точности для умножения
Когда я писал заметку о точном представлении чисел, я вдруг обнаружил, что не понимаю формулу расчета точности для умножения. Например, число из 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, последняя правка: 2023.07.22 17:06
Отзывы
✅ 2018/10/11 22:29, Автор сайта #0
число гениев среди разработчиков PL/1 сильно преувеличено — это всё взято из Фортрана Первым делом я про Фортран и подумал. Кто настолько досконально знает математику? Профессор по математике! А на чём программировал профессор? На Фортране!
Я ещё застал этих профессоров. Думаю, Вы тоже.слова песни «мои года — мое богатство» — не пустое балагурство А есть такое балагурство :) С возрастом приходит мудрость. Но иногда возраст приходит один. Добавить свой отзыв
Написать автору можно на электронную почту mail(аt)compiler.su
|