Pull to refresh
0
0
Спиридонов Юрий Маркович @Innotor

Изобретатель

Send message
Складываете и умножаете Вы двоичные числа. Как храните — вопрос десятый.

Как сказать? Если обрабатывать большой массив чисел из памяти, то вопрос распаковки весьма актуален.
Интересно было бы сравнить СДДФ с ДДФ на процессоре без команд умножения…

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

У меня смешанный десятично-двоичный формат.

В современных АЛУ операция умножения/деления двух целых чисел делается за 1 такт.
А вот, чтобы сложить два десятичных ЧПТ в BCD, а тем более с различными экспонентами, приходится попотеть. www.e-reading.club/chapter.php/99776/140/Cvetkova_-_Informatika_i_informacionnye_tehnologii__konspekt_lekciii.html
В СДДФ все операции производятся над целыми числами, представленными в двоичном виде. Мы умножаем/делим ни на число, которое «не равно основанию системы», а на целое число, равное 10 в какой-то степени, которое представлено в двоичном виде.
Не совсем понял, что говорит google?
остаётся проблема с округлением (10^64 + 10^-64 — 10^64 == 0).

В СДДФ такой проблемы не существует. Как и в обычной арифметике вычисление, допустим, 1,2345-1,2343 с точностью до 4 значащих цифр даст 0.
Необходимо различать следующие этапы арифметической обработки данных.
1. Распаковка. Она состоит из декодирования числа, записанного в памяти машинного слова в так называемом формате обмена. Число хранится в упакованном виде.
2. Арифметические операции, которые производятся над распакованными числами с использованием операционных регистров в расширенном виде.
3. Запаковка результата.
Сравнивая формат decimal IEEE и СДДФ, можно видеть, что упаковка-распаковка для decimal производится по достаточно сложному алгоритму, состоящему из проверок множества условий.
Числа в СДДФ записываются в память машины без какой-либо предварительной обработки.
Десятичная арифметика в настоящее время реализована двоично-десятичным форматом (BCD). Для округления в этом формате требуется операция деления/умножения на 10.
Реализовать сложение десятичных чисел в двоичном виде с разными экспонентами без деления на 10 можно только приблизительно.
Основная проблема в компьютерной бинарной арифметике, это получение необходимой точности вычислений. Существует много способов повысить точность вычислений. В частности: увеличение разрядности операционных регистров и специальные алгоритмы обработки (алгоритм Кэхэна), которые приводят к существенным дополнительным программно-аппаратным затратам.
Алгоритм, использующий СДДФ позволяет получать результаты, такие же, как сделанные вручную с небольшими накладными расходами…

Рассмотрим сумму двух чисел 1.234567*10^3+7.654321*10^-1. Вычисление проведем с точностью до 7 значащих цифр, или с точностью до 6 знаков после точки.
Для этого представим наши числа в нормализованном виде: 1234567*10^-3; 7654321*10^-1. В СДДФ они будут выглядеть как [0, 000100101101011010000111,1,11] и
[0, 011101001100101110110001,1, 1].
Будем складывать в соответствие с правилами арифметики. 1234567*10^-3+ 7654321*10^-1=(1234567*10^-2+ 7654321) *10^-1= (12345,67 + 7654321)*10^-1=7666666,67*10^-1≈7666667*10^-1. Или в двоичном виде: 1234567*10^-2= 000100101101011010000111/1100100≈ 11000000111001.1≈11000000111010=12346. Сумма чисел в скобках будет 11000000111010+011101001100101110110001=11101001111101111101011=7666667. В результате получим число 7666667*10^-1, такое же, как если бы мы вычисляли вручную с точностью до 7 значащих цифр. В СДДФ это число будет выглядеть как
[0, 11101001111101111101011,1, 1]. В нем S=0, M=11101001111101111101011=7666667, z=1, e=1.
Извините, в IEEE754-2018 формат decimal128 прописан. Но алгоритм упаковки для формата обмена в decimal и арифметика, использующая BDC весьма громоздкие.
Я вам больше скажу, в настоящее время в IEEE рабочая группа по стандарту 754 обсуждает новую редакцию стандарта, IEEE754-2018. Но это никак не противоречит тому, что я написал.
Что касается decimal128, это нерегламентированный формат. Не думаю, что стоит здесь в это углубляться.
Почему нельзя? Можно. Например, уровнем напряжения в проводе.

Какие бы вы физические преобразования ни делали, компьютеру вы должны предъявить число, которое записывается цифрами 0...9 или 0,1 или любыми другими. Все прочее он не понимает.
Без погрешностей ничего не бывает.
Бывает, например, для некоторых операций с целыми числами. А когда погрешности неизбежны, их можно уменьшить или увеличить, выбирая те или иные параметры представления чисел в компьютере.
Хорошее целое число 3 и хорошее целое число 7 при делении дают хорошее целое число 0.
Скажите это продавцу, который рассыпает 3 кг. сахара по 7 пакетов. Он будет счастлив.
Как правило, в реальности определяющее значение имеет либо методическая или инструментальная погрешности, не связанные с числовым представлением величины, либо погрешность вычислений, имеющая чисто компьютерную, двоичную природу.
Вот на тех, кому важна погрешность вычислений, имеющая чисто компьютерную, двоичную природу и расчитана моя статья.
Начнём с того, что значение можно представить, не записывая число. Например, аналоговым физическим параметром.
Представить себе можно, но передать кому-то это представление возможно только вместе с термометром. А уж в компьютер впихнуть ну никак не получится.
Если же мы к этому термометру приделаем датчик для автоматического ввода его значения в компьютер, то прибавится инструментальная погрешность датчика и погрешность цифрового представления, равная половине младшего двоичного разряда.
Погрешность цифрового представления здесь возникла относительно чего? Относительно аналогового физического параметра, который мы визуально наблюдаем или относительно некоего десятичного числа, которое мы хотели бы представить без погрешностей, ибо эта погрешность — бесплатный бонус, который может испортить нам жизнь.
Когда я записал число 0.2, предполагая, что это такая часть от 10 человек, равная 2 человекам, то имел ввиду целых человеков. Т.к. трудно себе представить ошибку в 0.05 человека.

Это арифметика целых чисел.
Вся арифметика вытекает из взаимоотношений целых чисел. Хорошее целое число 3 и хорошее целое число 7 при делении дают отвратительное число 3/7, которым недовольны, как в приличном обществе так и в не очень:).
Компьютеру совершенно все равно, с какой биографией ему подсовывают число. Он его врспринимает для себя точным, а уж потом портит, в силу своей природы.
Существует много способов получить точные результаты арифметических вычислений, но при решении конкретных задач приходится учитывать и другие факторы, такие, как скорость обработки, сложность алгоритма. Арифметика с плавющей точкой, реализованная в двоичном виде, сегодня самая простая и быстрая в реализации. Поэтому, не смотря на ее большие вычислительные погрешности, интерес к ней не уменьшается.
Погрешность – это фундаментальная характеристика любой измеряемой величины, и только одна из её компонентов связана с записью числа в виде цифр.

Написано хлестко, только смысл фразы не ясен. С «фундаментальной характеристикой измеряемой величины» не спорю. А вот про компоненту не понятно. Это относится к фундаментальной характеристике или к измеряемой величине? И как можно число записать без цифр или других символов, однозначно их заменяющих?
Источники [1] и [2] описывают двоичное представление вещественных чисел.

А вещественные числа в какой системе первоначально представляются?
и вообще не касаются чрезмерно любимой Вами десятичной системы

Тут не только меня надо в этом винить. Физики и математики свои уравнения почему-то привыкли решать в десятичной системе счисления. Бухгалтера зарплату тоже считают почему-то в десятичной системе.
десятичным числам, непредставимым в двоичной системе с выбранной для расчётов точностью, практически неоткуда появиться в жизни современного человека, так как первоисточником почти всех прецизионных измерений являются двоичные датчики.
Мне трудно представить, что человечество оперирует исключительно данными двоичных датчиков. Видимо не дотягивает до современного человека.
Можно, если угодно, смотреть на такие числа, как на некий артефакт, позволяющий нам руками записывать на бумаге значения, несуществующие в окружающем нас цифровом двоичном мире (например, упомянутое Вами число 0.2)

Отсюда следует, что число 0.2, все таки существует, а вот его значения в окружающем мире не существует. Вернее существует, но только, не в нашем мире, а в цифровом.

Когда вы записали “жульническое” число 0.2, то в действительности это значит только то, что вы заведомо ограничились погрешностью представления 0.05 (половина цены младшего разряда), и рассуждать о более младших разрядах не имеет смысла.

Чем же число 0.2 вам так насолило, что вы его называете «жульническим»? Не потому ли, что оно никак не вписывается в ваш двоичный мир?
Когда я записал число 0.2, предполагая, что это такая часть от 10 человек, равная 2 человекам, то имел ввиду целых человеков. Т.к. трудно себе представить ошибку в 0.05 человека.

Вы мне льстите. К моему сожалению:), учение о верных цифрах и погрешностях в учебниках о приближенных вычислениях рассматриваются в одном разделе. Погрешности являются следствием наличия неверных цифр.
А поскольку числа с плавающей точкой в основном приближенные, то к ним в полной мере применим и аппарат прближенных вычислений.
А статью я написал главным образом потому, что ни в русскоязычной ни в англоязычной литературе не отражена четкая связь между точностью (погрешностью) представления десятичны дробных чисел с размерностью разрядной сетки машинной мантиссы. Даже в таких авторитетных источниках как 1, 2 нет ответа на этот вопрос.
Описка. Должно быть n≤⌊0.3*9⌋=2
Здесь n≤⌊0.39=2⌋. Округляем до 2 десятичных знаков и получаем 0.19970703125≈ 0.20 Здесь гарантированно два верных знака.
Округлим до трех десятичных цифр и получим 0.199951171875≈0.200. Здесь три верные цифры
А как же 1,2,3 и т.д.
Можете считать 0.199 (если это была продукция от 0.2) за 0.2

В качестве ликбеза. А за какое число надо считать 0.199, если оно является продуктом числа 0.2?
а 0.199 (как изначальное значение) за 0.19 любым магическим способом,

Это в каких моих рассуждениях вы такое утверждение нашли?

Information

Rating
Does not participate
Location
Минск, Минская обл., Беларусь
Registered
Activity