Sergey, ты ещё здесь сидишь?
Оказывается это неправильные пчёлы, совсем неправильные. И, наверное, они делают неправильный мёд
Винни Пух
Понедельник Май 02 2005 10:24, George Shepelev wrote to Sergey Davydov:
SD>> А как на тpоичной машине выполняются побитовые логические SD>> опеpации и сдвиги? Вообще, где можно об этом почитать? GS> А чего там читать? Сдвиг тривиален, просто биты не двоичные, а GS> троичные.
Hа самом деле тут, конечно, нужно говорить о троичных "битах" (в кавычках), своеобразных квантах состояния троичной машины. В программировании подобные "странности" не новы, так у сишников встречается понятие "байта" (в кавычках), который не обязательно состоит из 8-ми бит ;-)
Отсюда следующий закономерный вопрос, что могут дать такие странные "биты", которые не сводятся к двум чётким состояниям ДА и HЕТ ?
Вообще, какой смысл может может быть у значения "бита", способного принимать промежуточные значения между 0 и 1 (HЕТ и ДА)? Hапример он может описывать _вероятность_ какого-либо события или утверждения. Этот подход иногда бывает чрезвычайно удобен. Hо как организовать логические операции над такими "битами"? Сам собой напрашивается вариант использовать выражения из теории вероятности. Практическое решение требует довольно много ресурсов и приводит к довольно странным результатам. Впрочем, это понятно, даже простейшие вещи в такой логике дают непривычные результаты, поскольку не работает закон исключённого третьего.
Так выражение x AND NOT(x) не обязательно равно нулю.
Единственное, что удаётся с лёгкостью соблюсти в подобных расчётах, это результаты на "граничных" условиях, к примеру
0 AND x = 0
1 OR x = 1
Одно из возможных _простых_ правил осуществления логических операций над странными (нечёткими) "битами" реализовано в т.н. нечёткой (fuzzy) логике. В этой логике каждый "бит" может принимать множество промежуточных состояний между ДА и HЕТ, операция AND означает MIN, а OR - MAX.
Пример различных значений "fuzzy-бита":
1,0 - вероятность 100%
0,75 - вероятность 75%
0,5 - вероятность 50%
0,25 - вероятность 25%
0,0 - вероятность 0%
Логическое И
x = a AND b = MIN (a,b)
┌──────┬──────┬──────┬──────┬──────┐ │ 0,0 │ 0,25 │ 0,5 │ 0,75 │ 1,0 │ ┌──────╬══════╪══════╪══════╪══════╪══════╡ │ 0,0 · 0,0 │ 0,0 │ 0,0 │ 0,0 │ 0,0 │ ├──────╫──────┼──────┼──────┼──────┼──────┤ │ 0,25 · 0,0 │ 0,25 │ 0,25 │ 0,25 │ 0,25 │ ├──────╫──────┼──────┼──────┼──────┼──────┤ │ 0,5 · 0,0 │ 0,25 │ 0,5 │ 0,5 │ 0,5 │ ├──────╫──────┼──────┼──────┼──────┼──────┤ │ 0,75 · 0,0 │ 0,25 │ 0,5 │ 0,75 │ 0,75 │ ├──────╫──────┼──────┼──────┼──────┼──────┤ │ 1,0 · 0,0 │ 0,25 │ 0,5 │ 0,75 │ 1,0 │ └──────╨──────┴──────┴──────┴──────┴──────┘
Логическое ИЛИ
x = a OR b = MAX (a,b)
┌──────┬──────┬──────┬──────┬──────┐ │ 0,0 │ 0,25 │ 0,5 │ 0,75 │ 1,0 │ ┌──────╬══════╪══════╪══════╪══════╪══════╡ │ 0,0 · 0,0 │ 0,25 │ 0,5 │ 0,75 │ 1,0 │ ├──────╫──────┼──────┼──────┼──────┼──────┤ │ 0,25 · 0,25 │ 0,25 │ 0,5 │ 0,75 │ 1,0 │ ├──────╫──────┼──────┼──────┼──────┼──────┤ │ 0,5 · 0,5 │ 0,5 │ 0,5 │ 0,75 │ 1,0 │ ├──────╫──────┼──────┼──────┼──────┼──────┤ │ 0,75 · 0,75 │ 0,75 │ 0,75 │ 0,75 │ 1,0 │ ├──────╫──────┼──────┼──────┼──────┼──────┤ │ 1,0 · 1,0 │ 1,0 │ 1,0 │ 1,0 │ 1,0 │ └──────╨──────┴──────┴──────┴──────┴──────┘
fuzzy логика используется в некоторых эхотажных системах для упрощённого представления алгоритмов управления сложными объектами. Это даёт возможность вместо поиска точного решения подобрать правила управления, реализующие приемлимый результат. Используя такой подход следует понимать, что строгость решения не гарантируется. В чём-то это сходно с работой нейронных сетей...
Георгий