Нумерація від нуля — метод нумерації, де першому елементу послідовності присвоюється індекс 0, а не 1. Такий метод дуже поширений в інформатиці. Також послідовності нумерації, що починаються з 0, досить поширені в математичній нотації, зокрема в комбінаториці. Ця нотація суперечить натуральним принципам пізнання, але в зазначених дисциплінах така нотація має свої переваги. Також іноді використовують термін перший у ситуаціях, навіть коли коли нумерація починається з нуля, що може привести до плутанини, Щоб запобігти плутанині цей елемент послідовності називають нульовим[1] , або домовляються про нотацію, що нумерація починається від нуля.

В інформатиці індекси масивів можуть починатись як з 0 так і з 1, це залежить від мови програмування. В сучасних мовах програмування зазвичай починаються від 0, хоча мови програмування для математики зазвичай індексують від 1.[2][3][4].

Іноді в математиці нумерація від нуля може використовуватись природно, коли порядкові номера мають добре визначений зміст, та елемент що передує першому елементу в цій послідовності, тобто нульовий, має той самий зміст; наприклад, нульовою похідною функції є сама функція, отримана диференціюванням нуль разів. Таке використання відповідає іменуванню елемента, який власне не належить до послідовності, але передує їй: нульова похідна взагалі не є похідною. Однак так само, як перша похідна передує другій похідній, так само нульова похідна (або сама вихідна функція) передує першій похідній.

Комп'ютерне програмування ред.

Походження ред.

Мартін Річардс, творець мови BCPL (попередника C ), розробив масиви, що починаються з 0 як природної позиції для початку доступу до вмісту масиву в мові, оскільки значення покажчика p використовується як адреса доступу до позиції p + 0 в пам'яті. [5] [6] BCPL вперше був скомпільований для IBM 7094 ; мова не запровадила непрямі пошуки під час виконання, тому оптимізацію непрямих даних, яку забезпечують ці масиви, було виконано під час компіляції. [6] Тим не менш, оптимізація була важливою. [6] [7]

Пізніше Едсгер В. Дейкстра написав доречну замітку «Чому нумерація повинна починатися з нуля» [8] у 1982 році, аналізуючи можливі конструкції індексів масиву, укладаючи їх у ланцюгову нерівність, поєднуючи чіткі ("чітка" - англ. Sharp inequality) та стандартні нерівності з чотирма можливостями, демонструючи, що на його переконання масиви з індексацією від нуля найкраще представлені діапазонами індексів, що не перекриваються, починаючи з нуля, посилаючись на відкриті, напіввідкриті та закриті інтервали, як і у випадку з дійсними числами. Критерії Дейкстри для надання переваги цій конвенції детально полягають у тому, що вона представляє порожні послідовності більш природним способом (ai < a ?), ніж замкнуті «інтервали» ( ai ≤ (a − 1) ? ), і що з напіввідкритими «інтервалами» натуральних чисел довжина підпослідовності дорівнює верхній мінус нижній межі ( ai < b дає (ba) можливі значення для i, з усіма цілими a, b i).

Використання в мовах програмування ред.

Таке використання випливає з вибору дизайну, вбудованого в багато важливих мов програмування, включаючи C, Java та Lisp. У цих трьох мовах типи послідовностей (масиви C, масиви та списки Java, списки та вектори Lisp) індексуються, починаючи з нульового нижнього індексу. Зокрема в C, де масиви тісно пов’язані з арифметикою вказівників, це робить реалізацію простішою: нижній індекс посилається на зміщення від початкової позиції масиву, тому перший елемент має зміщення нуль.

Посилання на пам’ять за допомогою адреси та зміщення представлено безпосередньо в комп’ютерному обладнанні практично на всіх комп’ютерних архітектурах, тому ця деталь конструкції в C полегшує компіляцію, ціною деяких людських факторів. У цьому контексті використання «нуля» як порядкового числа не є строго правильним, але широко поширеною звичкою в цій професії. Інші мови програмування, такі як Fortran або COBOL, мають нижні індекси масиву, починаючи з одиниці, оскільки вони мали на увазі як мови програмування високого рівня, і як такі вони повинні були відповідати звичайним порядковим номерам, які передували винаходу нуля протягом тривалого часу.

Pascal дозволяє діапазон масиву мати будь-який порядковий тип (включаючи перераховані типи). APL дозволяє програмно встановлювати початок індексу на 0 або 1 під час виконання. [9] [10] Деякі останні мови, такі як Lua та Visual Basic, прийняли ту саму конвенцію з тієї ж причини.

Нуль — це найменше ціле число без знаку, один із найфундаментальніших типів у програмуванні та розробці обладнання. Тому в інформатиці нуль часто використовується як базовий випадок для багатьох видів числової рекурсії. Доведення та інші види математичних міркувань в інформатиці часто починаються з нуля. З цих причин в інформатиці не є незвичайним нумерувати від нуля, а не від одиниці.

В останні роки ця риса також спостерігалася серед багатьох чистих математиків, де багато конструкцій визначаються як нумеровані з 0.

Якщо для представлення циклу використовується масив, зручно отримати індекс за допомогою функції модуля, результатом якої може бути нуль.

Числові властивості ред.

За допомогою нумерації від нуля діапазон можна виразити як напіввідкритий інтервал [0, n) на відміну від закритого інтервалу [1, n]. Порожні діапазони, які часто зустрічаються в алгоритмах, складно виразити за допомогою замкнутого інтервалу, не вдаючись до простих конвенцій, таких як [1, 0]. Завдяки цій властивості індексування з нуля потенційно зменшує кількість помилок «помилка на одиницю» і «помилка телеграфного (або парканного) стовпа». [8] З іншого боку, кількість повторів n обчислюється заздалегідь, що робить використання підрахунку від 0 до n − 1 (включно) менш інтуїтивно зрозумілим. Деякі автори віддають перевагу індексуванню з одиниці, оскільки воно більше відповідає тому, як сутності індексуються в інших контекстах. [11]

Інша властивість цієї конвенції полягає у використанні модульної арифметики, реалізованої в сучасних комп’ютерах. Зазвичай функція модуля відображає будь-яке ціле число за модулем N на одне з чисел 0, 1, 2, ..., N − 1, де N ≥ 1. Через це багато формул в алгоритмах (наприклад, для обчислення індексів хеш-таблиці) можна елегантно виразити в коді за допомогою операції модуля, коли індекси масиву починаються з нуля.

Операції з покажчиками також можна більш елегантно виразити на індексі з нульовою базою завдяки базовій логіці адреси/зміщення, згаданій вище. Для ілюстрації припустимо, що aадреса пам’яті першого елемента масиву, а i — індекс потрібного елемента. Щоб обчислити адресу потрібного елемента, якщо номери індексів починаються з 1, бажана адреса обчислюється за цим виразом:

a + s × ( i − 1),

де s — розмір кожного елемента. Навпаки, якщо числа індексів починаються з 0, вираз стає

a + s × i .

Цей простіший вираз більш ефективний для обчислення під час виконання.

Однак мова, яка бажає індексувати масиви від 1, може прийняти конвенцію, що кожна адреса масиву представлена a′ = as; тобто замість використання адреси першого елемента масиву така мова використовуватиме адресу фіктивного елемента, розташованого безпосередньо перед першим фактичним елементом. Тоді вираз індексації для індексу на основі 1 буде таким

a ′ + s × i .

Отже, перевага ефективності під час виконання індексування на основі нуля не є притаманною, а є артефактом рішення представити масив адресою його першого елемента, а не адресою фіктивного нульового елемента. Однак адреса цього фіктивного елемента цілком може бути адресою якогось іншого елемента в пам’яті, не пов’язаного з масивом.

На перший погляд, фіктивний елемент погано масштабується для багатовимірних масивів. Індексація багатовимірних масивів з нуля робить наївне (безперервне) перетворення в лінійний адресний простір (систематична зміна одного індексу за іншим) виглядає простішим, ніж при індексуванні з одиниці. Наприклад, при відображенні тривимірного масиву   у линійний масив L[M⋅N⋅P], обидва з елементами M⋅N⋅P , індекс r у линійному масиві дає доступ до специфічного елементу L[r] = A[z][y][x] при індексації від нуля, тобто [0 ≤ x < P], [0 ≤ y < N], [0 ≤ z < M], та [0 ≤ r < M⋅N⋅P], обчислюється за допомогою r = zMN + yM + x. Організувавши всі масиви з індексацією від одиниці ([1 ≤ x′P], [1 ≤ y′N], [1 ≤ z′M], [1 ≤ r′M⋅N⋅P]), і припускаючи аналогічний порядок елементів, дає r′ = (z′ − 1)⋅MN + (y′ − 1)⋅M + (x′ − 0) для доступу до того ж елементу, що, можливо виглядає складніше. Звичайно, r′ = r + 1, оскільки [z = z′ – 1], [y = y′ – 1], та [x = x′ – 1]. Простим і повсякденним прикладом є позиційна нотація, яка стала можливою завдяки винаходу нуля. У позиційному записі десятки, сотні, тисячі та всі інші цифри починаються з нуля, тільки одиниці починаються з одиниці. [12]


  • Індекси починаються з Нуля
    x
    y
    0 1 2 ..   .. 8 9
    0 00 01 02 08 09
    1 10 11 12 18 19
    2 20 21 22 28 29
    ..
       
    ..
    8 80 81 82 88 89
    9 90 91 92 98 99
    Вміст таблиці представляє індекс r.
  • Індекси починаються з Одиниці
    x'
    y'
    1 2 3 ..   .. 9 10
    1 01 02 03 09 10
    2 11 12 13 19 20
    3 21 22 23 29 30
    ..
       
    ..
    9 81 82 83 89 90
    10 91 92 93 99 100
    Вміст таблиці представляє індекс r′.


Така ситуація може призвести до певної плутанини в термінології. У схемі індексування на основі нуля першим елементом є «елемент номер нуль»; так само, дванадцятий елемент - "елемент номер одинадцять". Тому виникає аналогія від порядкових номерів до кількості пронумерованих предметів; найвищий індекс з n об’єктів буде n − 1 і відноситься до n -го елемента. З цієї причини перший елемент іноді називають нульовим елементом, намагаючись уникнути плутанини.

Наука ред.

У математиці багато послідовностей чисел або поліномів індексуються цілими невід’ємними числами, наприклад, числа Бернуллі та числа Белла.

І в механіці, і в статистиці визначається нульовий момент, що представляє загальну масу у випадку фізичної щільності, або повну ймовірність, тобто одиницю, для розподілу ймовірностей.

Нульовий закон термодинаміки був сформульований після першого, другого і третього законів, але вважався більш фундаментальним, звідки і його назва.

У біології кажуть, що організм має інтенціональність нульового порядку, якщо він не виявляє «загалом жодного наміру». Це може включати ситуацію, коли генетично зумовлений фенотип організму призводить до користі для здоров’я, оскільки він не «має наміру» виражати свої гени. [13] У подібному сенсі комп’ютер можна розглядати з цієї точки зору як інтенціональну сутність нульового порядку, оскільки він не «має наміру» виражати код програм, які він виконує. [14]

У біологічних або медичних експериментах початкові вимірювання, зроблені до експериментального часу, вважаються зробленими у нульовий день експерименту.

У геноміці для координат геному використовуються системи як на основі 0, так і на основі 1.

Нульовий пацієнт (або індексний випадок ) є початковим пацієнтом у вибірці населення епідеміологічного дослідження.

Інші сфери ред.

Нульовий рік не існує ні в широко використовуваному григоріанському календарі, ні в його попереднику, юліанському календарі. За цими системами за 1 роком до нашої ери слідує 1 рік нашої ери. Проте в нумерації астрономічних років є нульовий рік (де він збігається з 1 юліанським роком до н.е.) і в ISO 8601:2004 (де він збігається з 1 григоріанським роком до н.е.), а також у всіх буддійських та індуїстських календарях.

У багатьох країнах перший поверх у будівлях вважається поверх номер 0, а не як "1-й поверх", умовність найменування, яка зазвичай зустрічається в Сполучених Штатах Америки. Це створює узгоджений набір із підземними поверхами, позначеними від’ємними числами.

Хоча порядковий номер 0 здебільшого використовується в спільнотах, безпосередньо пов’язаних з математикою, фізикою та інформатикою, є також випадки в класичній музиці. Композитор Антон Брукнер вважав свою ранню симфонію ре мінор негідною включення до канону своїх творів, і написав у рахунку gilt nicht («не враховується») і поставив закреслене коло, маючи на увазі «недійсний». Але посмертно цей твір став відомий як Симфонія № 0 ре мінор, хоча насправді вона була написана після Симфонія № 1 до мінор. Існує ще більш рання Симфонія фа мінор Брукнера, яку іноді називають Симфонія № 00 (Брукнер). Російський композитор Альфред Шнітке також написав Симфонію № 0.

У деяких університетах, включаючи Оксфорд і Кембридж, "тиждень 0" або іноді "нульовий тиждень" відноситься до тижня перед першим тижнем лекцій у семестрі. В Австралії деякі університети називають це "тиждень О", який слугує каламбуром на тему "орієнтаційний тиждень". Аналогічно, вступні тижні в університетській освіті в Швеції зазвичай називаються nollning (обнулення).

Повітряні сили Сполучених Штатів починають базове навчання щосереди, а перший тиждень (з восьми) вважається, що починається з наступної неділі. Чотири дні перед неділею часто називають «нульовим тижнем».

Вразливість нульового дня - вразливість програмного забезпечення, яку було виявлено до моменту випуску ПЗ виробником.

24-годинний годинник і міжнародний стандарт ISO 8601 використовують 0 для позначення першої (нульової) години доби, відповідно до використання 0 для позначення першої (нульової) хвилини години та першої (нульової) секунди хвилини. Крім того, 12-годинний годинник, який використовується в Японії, використовує 0 для позначення години відразу після півночі та полудня на відміну від 12, що використовується в інших місцях, щоб уникнути плутанини, чи 12 am і 12 pm означає полудень або північ.

Станції King's Cross у Лондоні, Edinburgh Haymarket і станції в Упсалі, Йонаго, Стокпорті та Кардіффі мають платформу 0.

Малюнки Роберта Крамба для першого випуску Zap Comix були вкрадені, тому він намалював цілий новий випуск, який був опублікований як випуск 1. Пізніше він перефарбував свої фотокопії викрадених творів мистецтва та опублікував їх як випуск 0.

Брюссельська кільцева дорога в Бельгії має номер R0. Вона була побудована після кільцевої дороги навколо Антверпена, але Брюссель (будучи столицею) вважався заслуговуючим більш простого номера. Так само (недобудована) кільцева автострада навколо Будапешта в Угорщині називається M0.

Нуль іноді використовується в адресах вулиць, особливо в схемах, де парні числа розташовані на одній стороні вулиці, а непарні – на іншій. Прикладом є Крайст-Черч на Гарвардській площі, адреса якої "Вулиця Садова, 0".

У Формулі-1, коли чинний чемпіон світу не змагається в наступному сезоні, номер 1 не присвоюється жодному водієві, але один водій команди чемпіонів світу матиме номер 0, а інший — номер 2. Це сталося як у 1993, так і в 1994 роках, коли Деймон Хілл носив номер 0 в обох сезонах, оскільки чинний чемпіон Найджел Менселл залишив кар'єру після 1992 року, а чинний чемпіон Ален Прост залишив кар'єру після 1993 року.

Хронологічний приквел серіалу може мати номер 0, наприклад Ring 0: Birthday або Zork Zero.

Федеральні залізниці Швейцарії нумерують певні класи рухомого складу з нуля, наприклад локомотиви "Re 460" від 000 до 118.

У сфері фантастики Айзек Азімов зрештою додав нульовий закон до своїх Трьох законів робототехніки, по суті зробивши їх чотирма законами.

"Апроксимація нульового порядку" - термін, який вчені використовують для першої приблизної відповіді.

"Помилка на одиницю" - часта помилка у програмуванні, коли виконується на одну більше або на одну менше ітерацій циклу.


Джерела ред.

  1. M. Seed, Graham (1965). An Introduction to Object-Oriented Programming in C++ with Applications in Computer Graphics (вид. 2nd). British Library: Springer. с. 391. ISBN 1852334509. Процитовано 11 лютого 2020.
  2. Steve Eddins and Loren Shure. Matrix Indexing in MATLAB. Процитовано 23 лютого 2021.
  3. How to : Get Elements of Lists. Wolfram. Процитовано 23 лютого 2021.
  4. Indexing Arrays, Matrices, and Vectors. Maplesoft. Процитовано 23 лютого 2021.
  5. Martin Richards (1967). The BCPL Reference Manual (PDF). Massachusetts Institute of Technology. с. 11. Архів оригіналу (PDF) за 20 січня 2013. Процитовано 1 лютого 2023.
  6. а б в Mike Hoye. Citation Needed. Процитовано 28 січня 2014.
  7. Tom Van Vleck (1995). The IBM 7094 and CTSS. Процитовано 28 січня 2014.
  8. а б Dijkstra, Edsger Wybe (2 травня 2008). Why numbering should start at zero (EWD 831). E. W. Dijkstra Archive. University of Texas at Austin. Процитовано 16 березня 2011.
  9. Brown, Jim (December 1978). In Defense of Index Origin 0. ACM SIGAPL APL Quote Quad. 9 (2): 7. doi:10.1145/586050.586053.
  10. Hui, Roger. Is Index Origin 0 a Hindrance?. jsoftware.com. JSoftware. Процитовано 19 січня 2015.
  11. Programming Microsoft® Visual C# 2005 by Donis Marshall.
  12. Math 1st Grade / Place Value / Number grid. Khan Academy. Процитовано 28 липня 2018. Youtube title: Number grid / Counting / Early Math / Khan Academy.
  13. Byrne, Richard W. The Thinking Ape: Evolutionary Origins of Intelligence. Архів оригіналу за 18 липня 2011. Процитовано 18 травня 2010.
  14. Dunbar, Robin. The Human Story – A new history of mankind's Evolution. Архів оригіналу за 27 серпня 2010. Процитовано 18 травня 2010.