Ні, не «тріти» від цього мали врятювати, а додаткове число «невизначене» й підтримка його архітектурою (трійкова логіка), й не врятувати а зробити поведінку машини прогнозованою. Це можна порівняти із пробілом у письмі, нулем в числах.
Ще камін в город двійкових систем. Вони не вміють безпосередньо працювати із від'ємними цілими числами.
Для цілих чисел введено дві сутності: числа зі знаком й числа без знаку, що ще створює різноманітні ефекти/обмеження й програмісту треба це враховувати :)
Проблема контролю над складністю й відповідно надійності криється у психології, звичайна людина одночасно може оперувати 7+-2 сутностями. Ось чому настільки складна задача Ейнштейна. Спробуйте вирішити її без використання в голові без використання мнемотехнік.
Коли ми вирішуємо задачу це вже складна задача, інструмент на якому ми маємо вирішити її в ідеалі не має займати наш «оперативний простір», є поняття очікуваної поведінки, якщо одна операція призводить до різних поведінок то зростає складність використання даної операції, якщо ви використовуєте операцію "+" й забули поставити обмеження на вхідні дані, чи для даної ліби не передбачалося вихід за діапазон, й це призвело до неочікуваної поведінки а тестове покриття не здатне це передбачити бо вихідні дані після обробки правдоподібні (в багатьох задачах неможливо створити чітко детерміновані тести вхід — вихід, як правило це діапазони) то нащо плодити сутності без потреби, це означає, що операція "+" має вертати однозначно очікуване число або невизначений стан. І так по всіх операціях. Ще й бінарна логіка сильно нам утруднює реалізацію асинхронних систем.
Щодо логіки почитайте:
Бруснецова (Сетунь)
Яна Лукасевича (польський запис) якщо хватить терпіння то перше, що знайдете :)
Арістотеля, праці із логіки на нього посилаються тому треба бути в курсі. Можете й метафізику почитати.
Я вам говорю ось яблуко (реалізація технології), ви — воно зелене (не популярне). Колір яблука ще недостатня підстава для висновків про його смакові якості(популярність/непопулярність не достатня підстава для висновків про технологію) тим більше, якщо вам не відомий цей сорт.
… cyba: — тепер, я думаю, стало відомо, кому треба відривати руки.
тестерам ;)
…
для затравки, маєте два потоки, один передає визначені дані інший читає й пише кудись. Адреса звісно відома:
1) синхронна передача, потоку відомий розмір ділянки пам'яті, яку треба зчитати за раз
2) асинхронна, потоку відомий розмір буфера й порції даних
Ви маєте змінні із підтримкою невизначеного стану (вся пам'ять підтримує, жодних спецкодувань ви не потребуєте, все на рівні процесора)
Двійкові чи трійкові дані не має значення головне, що є стан невизначеності.
Уявили як просто організувати таку роботу?
П.Н. ця задачка чисто для розминки, висновки про якусь технологію не робіть :)
Про вікі і факти.
>> Трійкова система спрощує все, від схемотехніки до логіки. Успішна реалізація — ЕОМ «Сетунь».
cyba: Казанским заводом Математических машин было произведено 50 компьютеров Сетунь (с) Вікі
Що ви хотіли цим сказати? Що 50 машин це не успішна реалізація трійкової системи? Та хоч одна машина це успіх, ви б хоча б із предметною областю ознайомились перед висловленням якихось натяків.
Однако при переносе этой системы для использования на новой ракете, разработчиками не были учтены все особенности.
cyba: А куди ж без того. ;) Я навіть дозволю собі припустити, шо не надто високорівневу мову використовували. )))
це тільки загальна думка автора статті, настільки загальна, що із неї нової інформації неможливо отримати. З декількох фраз вам все стало ясно й ви прочитавши статтю з віки припустили, що використовувалась «не надто високорівнева мова», що ця фраза взагалі значить?(можете не відповідати)
Невизначений стан (помилкове значення комірки) обробляється в Excel, можете попрактикуватись, як це допомагає при виявленні помилок.
Щодо бінарної логіки, трійкової логіки, обробки невизначеності, надійності систем, теорії автоматів, тестування пізніше, якщо когось реально цікавить ця тема.
Це вже називається тролінг. В Аріані використовувалась мова Ada. Покладатись на статті у вікі це поганий стиль. Розробники Аріану не дурніші за нас.
Шкода втраченого часу, хоча можливо хтось для себе знайшов щось цікаве…
Про 0, мені не потрібен 0 чи молодший байт, мені потрібно щоб помилку було виявлено вчасно. Про яку математичну точність ви говорите, якщо я переповнив змінну а потім щось на неї поділив це в кращому випадку, а в гіршому ніхто нічого не помітить й тести прекрасно всі пройде а пацієнт отримав смертельну дозу опромінення чи ракета самознищилась.
Так, про переноси знають всі, тільки якось забули, одну бібліотечку прикрутили для інших умов і Аріан накрився мідним тазом. Усі тести прекрасно пройшли :)
Трійкова система спрощує все, від схемотехніки до логіки. Успішна реалізація — ЕОМ «Сетунь». Для розминки вирішіть задачу Баше про набір гирь, нічого в трійковій системі числень нема важкого.
Код HDB-3.
Небезпеку криє в собі нелогічність системи, плодження сутностей.
Операція додавання не може за собою ховати якісь ліві ефекти. І т.д.
С# реалізовує обробку ексепшином, виключення спрацює тільки у разі налаштованого контексту, подальше використовування числа приведе до невірного результату.
С# в Аріан не запхаєш.
стандартизований NaN це в кодуванні IEEE 754. Ще один головний біль з точки зору обчислень.
Закодувати можна третім рівнем. Не знаю чи трійкова система гарно підійде, але думаю якраз там є перспективи + квантові обчислення, невизначений стан вже передбачено.
>> a = a + 1;
>> Нічо це не сміття, а лише модуль результату.
це сміття, а точніше 0; Про який модуль ви говорите? Беззнакове число.
Наразі не маю часу більш детально описати.
Булева логіка має до цих проблем безпосереднє відношення. На ній все побудовано + костилі.
Те, що ви описали, це костилі. Яка МВР (мова високого рівня) логічно обробляє переповнення змінної (прапорці процесора це не логічно)?
Ексепшини не панацея, вони створюють ілюзію надійності, насправді криють в собі небезпечні ефекти, помилки в компіляторі й рантаймі, бо ускладнюють систему.
WinAPI — не логічно, забули перевірити — добре що вилетіло, в гіршому випадку отримаєте малозрозумілу поведінку а ще гірше коли отримаєте правдоподібний результат.
Всі ці труднощі накладаються й так на не просту проблему — верифікація алгоритма…
Тому, АРП має підтримувати роботу із невизначеним числом, пам'ять також. Інтерфейси теж. Це значно спростить використання ЕОМ в реальній практиці.
П.Н.
size8bitunsignet a;
a = 255;
//куча коду
a = a + 1; // результат сміття з точки зору додавання, якщо ви використовуєте ефект переповнення числа для якихось своїх цілей то руки вам відірвати треба, для цього необхідно визначати іншу операцію.
Наразі не маю часу більш детально описати.
Булева логіка має до цих проблем безпосереднє відношення. На ній все побудовано + костилі.
Те, що ви описали, це костилі. Яка МВР (мова високого рівня) логічно обробляє переповнення змінної (прапорці процесора це не логічно)?
Ексепшини не панацея, вони створюють ілюзію надійності, насправді криють в собі небезпечні ефекти, помилки в компіляторі й рантаймі, бо ускладнюють систему.
WinAPI — не логічно, забули перевірити — добре що вилетіло, в гіршому випадку отримаєте малозрозумілу поведінку а ще гірше коли отримаєте правдоподібний результат.
Всі ці труднощі накладаються й так на не просту проблему — верифікація алгоритма…
Тому, АРП має підтримувати роботу із невизначеним числом, пам'ять також. Інтерфейси теж. Це значно спростить використання ЕОМ в реальній практиці.
По пам'яті: «Чому ПЗ настільки дороге»
Класика: «Структурне програмування», «дисципліна програмування»
Дейкстра розробляє принцип «Доказового програмування»
Тестування не дає гарантії правильного функціонування ПЗ, лише гарантується правильність на тестових прикладах, крок вправо, крок вліво від тестів — кирдик.
Проблема в ІТ взагалі в основах в Булевій алгебрі, вона дефектна й неадекватна реальності. Не передбачає невизначений стан, лише так/ні, і це призводить до створення усіляких костилів (обробка «виключних»/непередбачених ситуацій).
Ділення на ноль страшна проблема, ну й що що ділю на ноль? Результатом має бути невизначене число а не зовнішня дія по відношенню до Булевої алгебри — переривання. В логіці мають бути передбачені такі ситуації а не костилями й латками латати логічні «дири».
Переповнення числа має бути невизначене число а не сміття, ініціалізуватися пам'ять має невизначеним числом. Результат операції із таким числом — невизначене число. Тоді логіка стає так/ні/не визначено.
закинув свого бота, нехай повоює.
IhorP