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

Математики на ЛФ

Автор arseniiv, октября 30, 2008, 17:48

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

Vaelg

Цитата: myst от ноября  9, 2008, 17:15
Цитата: "Vaelg" от
Отсутствие результата (NULL) это ошибка, обусловленная отсутствием инициализации.<...>
Вот здесь таблицы истинности конъюнкции, дизъюнкции и отрицания в SQL: http://en.wikipedia.org/wiki/Null_(SQL)#Three-valued_logic_.283VL.29
Здесь таблица истинности троичной логики: http://en.wikipedia.org/wiki/Ternary_logic#Basic_truth_table
Найдите разницу.
Кажется, мне не хватает букв... :)
Можно я, не глядя в эти таблицы, еще раз попробую донести мою мысль?
Итак, пусть мы создали некую переменную х. С точки зрения 3значной логики эта переменная (выражение, высказывание) имеет одно из трех значений: И, Л, Н.
С точки зрения ЯП эта переменная х не имеет никакого значения (NULL), пока оно не будет задано явно. NULL - это не третье значение, а отсутствие какого-либо значения. Использование такой переменной, например, х+1, немедленно приводит к ошибке, поскольку неизвестно, к какому значению прибавлять 1. То, что в sql допустимо оставлять переменную без значения не является открытием в программировании вообще, но и трехзначной логикой это называть можно с очень большой натяжкой.
Meileann muilte Dé go mall, ach meilid siad go mín.

Vaelg

Цитата: myst от ноября  9, 2008, 17:08
Цитата: "RawonaM" от
Прошу прощения за мою недоходчивость, можно для особо тупых на пальцах объяснить? То что в десятеричной 10 чисел это понятно 0-9, а что делать с десятью знаками в двоичной системе и как у вас вышло 32?
Представьте, что у нас в коробке лежат по десять цифр на каждую из наших систем счисления. Для десятичной системы это будут 0..9, для двоичной  - 1,1,1,1,1,0,0,0,0,0, для троичной - 0,1,2,0,1,2,0,1,2,0.
В десятичной системе у нас все цифры уйдут на один разряд (10 чисел). В двоичной - на пять разрядов (32 числа). В троичной - на три с копейкой (38 чисел).
Вот только к плотности информации это имеет мало отношения. Говорилось о возможности представления той или иной ричности одним битом. При 10ой системе один триггер может иметь 10 положений, при 2ой - два. Соответственно в первом случае один бит может передать 10 значений, во втором - все те же два.
Meileann muilte Dé go mall, ach meilid siad go mín.

myst

Цитата: "Vaelg" от
Использование такой переменной, например, х+1, немедленно приводит к ошибке, поскольку неизвестно, к какому значению прибавлять 1.
Стоп. Мы говорим о логических операциях.
В контексте этих операций у SQL NULL не эквивалентен FALSE, в отличие от многих других языков программирования. Сравнение таблиц истинности логических операций SQL и соответствующих таблиц операций троичной логики показывает, что значение NULL SQL эквивалентно значению UKNOWN троичной логики.
Так что же Вас не устраивает? Что ещё нужно, чтобы не было натяжки?

myst

Цитата: "Vaelg" от
Вот только к плотности информации это имеет мало отношения.
Я подозреваю, что Ahori назвал эту меру плотностью по ошибке. Здесь скорее не плотность, а эффективность использования числа состояний носителя. Хотя... наверное, и это можно назвать плотностью.

Vaelg

Цитата: myst от ноября  9, 2008, 18:45
Цитата: "Vaelg" от
Использование такой переменной, например, х+1, немедленно приводит к ошибке, поскольку неизвестно, к какому значению прибавлять 1.
Стоп. Мы говорим о логических операциях.

Да вполне нормальная операция:
{
bool x=false;
х=х+1;
}
теперь х=truе.
Цитировать
В контексте этих операций у SQL NULL не эквивалентен FALSE, в отличие от многих других языков программирования. Сравнение таблиц истинности логических операций SQL и соответствующих таблиц операций троичной логики показывает, что значение NULL SQL эквивалентно значению UKNOWN троичной логики.
Так что же Вас не устраивает? Что ещё нужно, чтобы не было натяжки?
Во многих других ЯП NULL также не эквивалентен false. Натяжка в том, еще раз, что отсутствие значения не тождественно значению "неопределенно". Если в 3-логике вы получаете значение, то в sql вы получаете NULL (отсутствие значения), которое условно эквивалентно неопределенному. Но по сути им не является, поелику никакого значения нет вовсе. И получив вывод NULL, вы понимаете, что имеете дело с ошибкой, поскольку просто забыли вписать в поле "цвет" слово "белый" (ошибка). Вы ищете нужную ячейку, вбиваете "белый"  и получаете ни какой нафиг не NULL, а - "снег".
Не знаю уже, как еще.
Meileann muilte Dé go mall, ach meilid siad go mín.

Vaelg

Плотность записи информации тем выше, чем меньше бит требуется для ее хранения. В виртуальной 10й системе для хранения числа 3 достаточно было бы одного бита. В двоичной - необходимо 2. То же и с числом 4 в троичной системе.
Meileann muilte Dé go mall, ach meilid siad go mín.

RawonaM

Цитата: "myst" от Представьте, что у нас в коробке лежат по десять цифр на каждую из наших систем счисления. Для десятичной системы это будут 0..9, для двоичной  — 1,1,1,1,1,0,0,0,0,0, для троичной — 0,1,2,0,1,2,0,1,2,0.
В десятичной системе у нас все цифры уйдут на один разряд (10 чисел). В двоичной — на пять разрядов (32 числа). В троичной — на три с копейкой (38 чисел).
Ок, кажется до меня начинает доходить... Имеется в виду сколько последовательных чисел можно изобразить из этого набора, так выходит? А непоследовательных выходит однозначно больше в десятеричной системе, это нельзя использовать в технике?

П.С. Однако... по форумуле выходит десять, но если посчитать на пальцах, то в десятичном выходит можно составить одинадцать чисел подряд (0-9 и 10), в двоичном по ходу тоже на один больше (последнее число 100000), а вот в троичном вообще даже 222 это уже 39, больше, чем дает формула, плюс диапазон 1000 по 1110. Т.е. все-таки формула не совсем о том. Так о чем же?

злой

Цитата: "Vaelg" от
Да вполне нормальная операция:
{
bool x=false;
х=х+1;
теперь х=truе.
}

Обозначать истину единицей, а ложь нулём - условность. То, что их можно таким образом инкрементировать тоже только потому, что программисты так договорились. Так и в SQL договорились, что NULL соответствует неопределенности. Значение не определено. И это дело подчиняется троичной логике.

Entre los individuos, como entre las naciones, el respeto al derecho ajeno es la paz.   - Benito Juárez

RawonaM

Цитата: "myst" от
Я подозреваю, что Ahori назвал эту меру плотностью по ошибке.
Так это называют везде, он не ошибся. И считается что она самая высокая в е-ричном измерении :) Как можно исчислять в нецелом базисе я так еще и не понял :)

myst

Цитата: "RawonaM" от
выходит можно составить одинадцать чисел подряд (0-9 и 10)
Нет, Вы 1 и 0 извели на запись 1 и 0. Они же у нас в одном экземпляре. Та же ошибка и в остальных системах. :)
Вы попробуйте на бумаге записать, только, чур, больше цифр «не из коробки» не брать. ;)

RawonaM

Цитата: "RawonaM" от
а вот в троичном вообще даже 222 это уже 39, больше, чем дает формула, плюс диапазон 1000 по 1110.
Пардон, я ошибся, 222 это 26, но вопроса это не снимает, потому что все еще можно составить числа вплоть до 1110, что равно 93, т.е. всего можно составить 94 числа, а не 38 с хвостиком, как по формуле. Где я ошибаюсь?

Vaelg

Цитата: злой от ноября  9, 2008, 19:27
Цитата: "Vaelg" от
Да вполне нормальная операция:
{
bool x=false;
х=х+1;
теперь х=truе.
}

Обозначать истину единицей, а ложь нулём - условность. То, что их можно таким образом инкрементировать тоже только потому, что программисты так договорились. Так и в SQL договорились, что NULL соответствует неопределенности. Значение не определено. И это дело подчиняется троичной логике.


Ну да, ну да. Только вот x=NULL+1 не проходит. Потому что логика в корне - 2значная. Истину и ложь можно обозначить как угодно и всегда получить нужное значение простым !х. А что можно получить путем !NULL?
Meileann muilte Dé go mall, ach meilid siad go mín.

RawonaM

Цитата: "myst" от
Нет, Вы 1 и 0 извели на запись 1 и 0. Они же у нас в одном экземпляре.
myst, если я не ошибаюсь, то если они в одном экземпляре, то максимальное количество выйдет десять при любой системе. :) При двоечной выйдет 0,1,10,11,100 и коробка окажется с еще одним нулем, который нам ни разу не поможет :)

Ahori

Оценим k-ичную систему счисления по соотношению "цена-качество" N(k) = информация/сложность реализации
информация одного разряда = log2 k (например, в одном двоичном символе - 1 бит, в шестнадцатеричном символе - 4 бита
сложность реализации = k (двоичная система использует два уровня напряжения, шестнадцатеричная - 16 уровней)
т.е. N(k)= (log2 k)/k
например, N(2) = 0.5, N(16) = 0,25, N(10) =0,316, N(3) = 0,577, максимум - N(2,718) ~=0,605.
Таким образом, система с основанием 3 получается самой эффективной.

RawonaM

Я уже пробовал и писать и что хочешь, осталось только реальную коробочку сделать и в нее циферки положить :) Иначе я ночью не усну, пока не разберусь с этим делом :)

RawonaM

Цитата: "Ahori" от
Оценим k-ичную систему счисления по соотношению "цена-качество" N(k) = информация/сложность реализации
информация одного разряда = log2 k (например, в одном двоичном символе - 1 бит, в шестнадцатеричном символе - 4 бита
сложность реализации = k (двоичная система использует два уровня напряжения, шестнадцатеричная - 16 уровней)
т.е. N(k)= (log2 k)/k
например, N(2) = 0.5, N(16) = 0,25, N(10) =0,316, N(3) = 0,577, максимум - N(2,718) ~=0,605.
Таким образом, система с основанием 3 получается самой эффективной.
Путь теперь мне кто-нибудь на пальцы переведет  :-[

myst

Цитата: "Vaelg" от
Да вполне нормальная операция:
{
bool x=false;
х=х+1;
}
теперь х=truе.
Это не логические операции, и это не SQL. Это отмороженный C++ какой-то. Упаси господи, такое писать!
Но это многое объясняет... :)
Вы считаете, что NULL в C++ и NULL в SQL одно и тоже?
Чем отличается NULL от false в контексте логических операций C++?

myst

Цитата: "RawonaM" от
При двоечной выйдет 0,1,10,11,100 и коробка окажется с еще одним нулем, который нам ни разу не поможет
Тааак... :what: Значит, я неправильно объяснил. :-[

Ahori

По поводу SQL, я его не знаю, но то что вы называете NULL очень похоже по описанию на состояние X в цифровой схемотехнике.
Дело в том, что в простейшем случае, описывая входы/выходы вентилей, обычно используется четырёхзначный алфавит - 0, 1, X(состояние неизвестно) и Z(сложно объяснить :) ) (это в простейшем случае, иногда еще вводят символы типа "слабый ноль)
При этом чётко описаны результаты действий, например X & 1 = X, X& 0 =0 и так далее.
Но, несмотря на это, никакой речи о троичной системе идти не может - в реальном проводнике напряжение всегда соответствует либо 0, либо 1.

myst

Фтопку коробку. :)
Для одного разряда десятичной системы нужен объект с 10-ю состояниями. В двоичной этого количества состояний хватит на пять разрядов. И чисел этим количеством состояний можно закодировать больше. Может, так понятнее?

myst

Цитата: "Ahori" от
Но, несмотря на это, никакой речи о троичной системе идти не может - в реальном проводнике напряжение всегда соответствует либо 0, либо 1.
Вот эту штуку ведь как-то сделали:

Интересно, как?

злой

Цитата: Ahori от ноября  9, 2008, 20:05
По поводу SQL, я его не знаю, но то что вы называете NULL очень похоже по описанию на состояние X в цифровой схемотехнике.
Дело в том, что в простейшем случае, описывая входы/выходы вентилей, обычно используется четырёхзначный алфавит - 0, 1, X(состояние неизвестно) и Z(сложно объяснить :) ) (это в простейшем случае, иногда еще вводят символы типа "слабый ноль)
При этом чётко описаны результаты действий, например X & 1 = X, X& 0 =0 и так далее.
Но, несмотря на это, никакой речи о троичной системе идти не может - в реальном проводнике напряжение всегда соответствует либо 0, либо 1.

Потому что это двоичная логика изначально. Договорились, что до скольки-то вольт (скажем, одного) считать за ноль, свыше другого значения (скажем, полтора вольта) - единица, а если в зазор между 1 и 1,5 попадает - неопределенность. В двоичной логике так или иначе эту неопределенность сведут к нулю или единице, не любят ее. А Z-состояние - это когда вообще нельзя применять логику, это скорее схемотехническое  понятие, чем к логике имеющее отношение.
Entre los individuos, como entre las naciones, el respeto al derecho ajeno es la paz.   - Benito Juárez

Vaelg

Цитата: myst от ноября  9, 2008, 19:55
Цитата: "Vaelg" от
Да вполне нормальная операция:
{
bool x=false;
х=х+1;
}
теперь х=truе.
Это не логические операции, и это не SQL. Это отмороженный C++ какой-то. Упаси господи, такое писать!
Ой, да бросьте вы :) . Я использовал это (в принципе) при написании той части виртмашины, которая ведает логическими операциями. Так было проще. И все чудненько работает. Так что ваше "упаси, Господи" тут как бы не встречает сочуствия.
Цитировать
Но это многое объясняет... :)
Вы считаете, что NULL в C++ и NULL в SQL одно и тоже?
Чем отличается NULL от false в контексте логических операций C++?

Я не сравниваю сю и скулу. Я пытаюсь вам объяснить, что скуловский NULL и "неопределенно" 3-значной логики - это совсем не одно и то же и их сведение - не более, чем условность.
Meileann muilte Dé go mall, ach meilid siad go mín.

злой

Цитата: myst от ноября  9, 2008, 20:14
Цитата: "Ahori" от
Но, несмотря на это, никакой речи о троичной системе идти не может - в реальном проводнике напряжение всегда соответствует либо 0, либо 1.
Вот эту штуку ведь как-то сделали:

Интересно, как?

В Сетуни ячейки памяти и логика не на бинарных защелках строились, а на ферромагнитных элементах, которые могли иметь три состояния. Одноразрядный регистр мог хранить один трит информации. Из шести трит собирается один трайт :)
Entre los individuos, como entre las naciones, el respeto al derecho ajeno es la paz.   - Benito Juárez

злой

Entre los individuos, como entre las naciones, el respeto al derecho ajeno es la paz.   - Benito Juárez

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

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

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

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

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