Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Плавающие числа vs. логарифмы

Автор Toman, января 20, 2018, 05:17

0 Пользователи и 1 гость просматривают эту тему.

Toman

Собственно, интересно, почему принято на компьютерах "вещественные" числа представлять именно в виде с плавающей точкой с целочисленным показателем, а не в виде, например, просто нецелочисленного показателя плюс знакового бита (ну или энного числа бит мнимой части показателя, если нужно комплекское число). У второго варианта, в отличие от плавающих, относительная точность во всём доступном для ненулевых значений интервале постоянна, а не меняется скачками в (основание системы счисления) раз. Правда, недостатком можно счесть то, что, в отличие от плавающих чисел, у которых после достижения минимального показателя можно приближаться к нулю с хотя бы не ухудшающейся абсолютной точностью, в чисто логарифмическом формате ниже минимального показателя никаких чисел записать нельзя, так что вокруг нуля получается большая "дыра" (сам ноль на двоичном компьютере можно было бы либо записывать искусственно - считать за строго нулевое значение число с совсем минимальным показателем - либо выделить под это ещё один бит кроме знакового, либо вообще забить на этот ноль). Но это ведь, честно говоря, такой как бы изначально не совсем штатный вариант использования плавающих чисел. Ну т.е. если вообще приходится пользоваться этой частью диапазона, кроме как в силу редкой, практически невероятной, случайности, то можно считать, что что-то было сделано явно не так и нужно как-то иначе организовать вычисления.

Плавающие числа, конечно, удобно складывать-вычитать и более-менее терпимо умножать-делить. А вот насколько мрачно аппаратно складывать-вычитать числа в логарифмическом виде?
(Но даже если действительно неприемлемо мрачно и медленно - для целой кучи отдельных чисто практических применений такого типа форматы были бы явно удобнее плавающих - например, для той же растровой графики, пожалуй).
Во́зле до́ма хо́лм с куля́ми - вы́йду на́ холм, ку́ль поставлю.
В славном городе Miami тётки мерялись ногтями, тик иң озын завсегда у Фиделя борода!

Тайльнемер

Цитата: Toman от января 20, 2018, 05:17
А вот насколько мрачно аппаратно складывать-вычитать числа в логарифмическом виде?
Да, наверное, из-за этого такое и не делают.
Не в курсе, насколько сложны аппаратные экспонента-логарифм. Действительно, интересно.

Python

ЦитироватьНе в курсе, насколько сложны аппаратные экспонента-логарифм.
Если не ограничиваться дискретными логическими элементами, то довольно простые:
ЦитироватьПростейшая логарифмирующая ячейка (рис. 3.3-1) состоит из диода \(VD\) и резистора \(R\), величина которого значительно больше сопротивления диода в любой точке рабочего участка ВАХ. Падение напряжения на логарифмирующем диоде прямо пропорционально логарифму напряжения входного сигнала (т.к. ВАХ диода в некотором приближении подчиняется уравнению Эберса-Молла). Погрешность логарифмирования уменьшается с увеличением сопротивления \(R\), однако при этом увеличивается минимальная величина сигнала, который может прологарифмировать ячейка.

В качестве логарифмирующих диодов могут быть использованы кремниевые или германиевые выпрямительные диоды, а также диоды с переходом Шоттки (именно с ними достигается наибольшая точность логарифмирования).

http://www.club155.ru/analogcircuits-log
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Тайльнемер

Ага, было в стародавние времена такое дело — аналоговые ЭВМ. Операторы сидели с отвёртками, «держали ноль», плывущий от температуры на каждом элементе по-своему. Не надо такого добра.

Toman

И, главное, результаты не просто не точны, а непредсказуемы/невоспроизводимы. Что совершенно не устраивает никаких разработчиков ПО, как правило. Так что да, в цифровом компе годится только дискретная логика.

А во-вторых, как раз сложность логарифмирования и экспоненты в такой версии кодирования чисел не особо интересуют, поскольку эта операция нужна максимум один раз для входных и выходных данных (но вообще-то те и другие могли бы уже храниться в нужном виде). Интересует именно сложение-вычитание - которое в принципе не обязано проводиться только через пересчёт в стандартный плавающий вид (экспонента), сложение в нём и обратно логарифмирование результата. Возможны какие-то обходные методы, в т.ч. какой-нибудь метод грубой силы - что-нибудь на базе таблиц с участием нескольких производных.
Во́зле до́ма хо́лм с куля́ми - вы́йду на́ холм, ку́ль поставлю.
В славном городе Miami тётки мерялись ногтями, тик иң озын завсегда у Фиделя борода!

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр