Нумерація від нуля — метод нумерації, де першому елементу послідовності присвоюється індекс 0, а не 1. Такий метод дуже поширений в інформатиці. Також послідовності нумерації, що починаються з 0, досить поширені в математичній нотації, зокрема в комбінаториці. Ця нотація суперечить натуральним принципам пізнання, але в зазначених дисциплінах така нотація має свої переваги. Також іноді використовують термін перший у ситуаціях, навіть коли нумерація починається з нуля, що може привести до плутанини, Щоб запобігти плутанині цей елемент послідовності називають нульовим , або домовляються про нотацію, що нумерація починається від нуля.
В інформатиці індекси масивів можуть починатись як з 0 так і з 1, це залежить від мови програмування. В сучасних мовах програмування зазвичай починаються від 0, хоча мови програмування для математики зазвичай індексують від 1..
Іноді в математиці нумерація від нуля може використовуватись природно, коли порядкові номера мають добре визначений зміст, та елемент що передує першому елементу в цій послідовності, тобто нульовий, має той самий зміст; наприклад, нульовою похідною функції є сама функція, отримана диференціюванням нуль разів. Таке використання відповідає іменуванню елемента, який власне не належить до послідовності, але передує їй: нульова похідна взагалі не є похідною. Однак так само, як перша похідна передує другій похідній, так само нульова похідна (або сама вихідна функція) передує першій похідній.
Комп'ютерне програмування
Походження Мартін Річардс, творець мови BCPL (попередника C ), розробив масиви, що починаються з 0 як природної позиції для початку доступу до вмісту масиву в мові, оскільки значення покажчика p використовується як адреса доступу до позиції в пам'яті. BCPL вперше був скомпільований для IBM 7094 ; мова не запровадила непрямі пошуки під час виконання, тому оптимізацію непрямих даних, яку забезпечують ці масиви, було виконано під час компіляції. Тим не менш, оптимізація була важливою.
Пізніше Едсгер В. Дейкстра написав доречну замітку «Чому нумерація повинна починатися з нуля» у 1982 році, аналізуючи можливі конструкції індексів масиву, укладаючи їх у ланцюгову нерівність, поєднуючи чіткі ("чітка" - англ. Sharp inequality) та стандартні нерівності з чотирма можливостями, демонструючи, що на його переконання масиви з індексацією від нуля найкраще представлені діапазонами індексів, що не перекриваються, починаючи з нуля, посилаючись на відкриті, напіввідкриті та закриті інтервали, як і у випадку з дійсними числами. Критерії Дейкстри для надання переваги цій конвенції детально полягають у тому, що вона представляє порожні послідовності більш природним способом , ніж замкнуті «інтервали» ( ), і що з напіввідкритими «інтервалами» натуральних чисел довжина підпослідовності дорівнює верхній мінус нижній межі ( дає можливі значення для i, з усіма цілими a, b i).
Використання в мовах програмування Таке використання випливає з вибору дизайну, вбудованого в багато важливих мов програмування, включаючи C, Java та Lisp. У цих трьох мовах типи послідовностей (масиви C, масиви та списки Java, списки та вектори Lisp) індексуються, починаючи з нульового нижнього індексу. Зокрема в C, де масиви тісно пов’язані з арифметикою вказівників, це робить реалізацію простішою: нижній індекс посилається на зміщення від початкової позиції масиву, тому перший елемент має зміщення нуль.
Посилання на пам’ять за допомогою адреси та зміщення представлено безпосередньо в комп’ютерному обладнанні практично на всіх комп’ютерних архітектурах, тому ця деталь конструкції в C полегшує компіляцію, ціною деяких людських факторів. У цьому контексті використання «нуля» як порядкового числа не є строго правильним, але широко поширеною звичкою в цій професії. Інші мови програмування, такі як Fortran або COBOL, мають нижні індекси масиву, починаючи з одиниці, оскільки вони мали на увазі як мови програмування високого рівня, і як такі вони повинні були відповідати звичайним порядковим номерам, які передували винаходу нуля протягом тривалого часу.
Pascal дозволяє діапазон масиву мати будь-який порядковий тип (включаючи перераховані типи). APL дозволяє програмно встановлювати початок індексу на 0 або 1 під час виконання. Деякі останні мови, такі як Lua та Visual Basic, прийняли ту саму конвенцію з тієї ж причини.
Нуль — це найменше ціле число без знаку, один із найфундаментальніших типів у програмуванні та розробці обладнання. Тому в інформатиці нуль часто використовується як базовий випадок для багатьох видів числової рекурсії. Доведення та інші види математичних міркувань в інформатиці часто починаються з нуля. З цих причин в інформатиці не є незвичайним нумерувати від нуля, а не від одиниці.
В останні роки ця риса також спостерігалася серед багатьох чистих математиків, де багато конструкцій визначаються як нумеровані з 0.
Якщо для представлення циклу використовується масив, зручно отримати індекс за допомогою функції модуля, результатом якої може бути нуль.
Числові властивості За допомогою нумерації від нуля діапазон можна виразити як напіввідкритий інтервал на відміну від закритого інтервалу . Порожні діапазони, які часто зустрічаються в алгоритмах, складно виразити за допомогою замкнутого інтервалу, не вдаючись до простих конвенцій, таких як . Завдяки цій властивості індексування з нуля потенційно зменшує кількість помилок «помилка на одиницю» і «помилка телеграфного (або парканного) стовпа». З іншого боку, кількість повторів n обчислюється заздалегідь, що робить використання підрахунку від 0 до (включно) менш інтуїтивно зрозумілим. Деякі автори віддають перевагу індексуванню з одиниці, оскільки воно більше відповідає тому, як сутності індексуються в інших контекстах.Programming Microsoft® Visual C# 2005 by Donis Marshall.
Інша властивість цієї конвенції полягає у використанні модульної арифметики, реалізованої в сучасних комп’ютерах. Зазвичай функція модуля відображає будь-яке ціле число за модулем N на одне з чисел , де . Через це багато формул в алгоритмах (наприклад, для обчислення індексів хеш-таблиці) можна елегантно виразити в коді за допомогою операції модуля, коли індекси масиву починаються з нуля.
Операції з покажчиками також можна більш елегантно виразити на індексі з нульовою базою завдяки базовій логіці адреси/зміщення, згаданій вище. Для ілюстрації припустимо, що a — адреса пам’яті першого елемента масиву, а i — індекс потрібного елемента. Щоб обчислити адресу потрібного елемента, якщо номери індексів починаються з 1, бажана адреса обчислюється за цим виразом:
a + s × ( i − 1),
де s — розмір кожного елемента. Навпаки, якщо числа індексів починаються з 0, вираз стає
a + s × i .
Цей простіший вираз більш ефективний для обчислення під час виконання.
Однак мова, яка бажає індексувати масиви від 1, може прийняти конвенцію, що кожна адреса масиву представлена ; тобто замість використання адреси першого елемента масиву така мова використовуватиме адресу фіктивного елемента, розташованого безпосередньо перед першим фактичним елементом. Тоді вираз індексації для індексу на основі 1 буде таким
a ′ + s × i .
Отже, перевага ефективності під час виконання індексування на основі нуля не є притаманною, а є артефактом рішення представити масив адресою його першого елемента, а не адресою фіктивного нульового елемента. Однак адреса цього фіктивного елемента цілком може бути адресою якогось іншого елемента в пам’яті, не пов’язаного з масивом.
На перший погляд, фіктивний елемент погано масштабується для багатовимірних масивів. Індексація багатовимірних масивів з нуля робить наївне (безперервне) перетворення в лінійний адресний простір (систематична зміна одного індексу за іншим) виглядає простішим, ніж при індексуванні з одиниці. Наприклад, при відображенні тривимірного масиву у линійний масив L[M⋅N⋅P], обидва з елементами M⋅N⋅P , індекс r у линійному масиві дає доступ до специфічного елементу при індексації від нуля, тобто [0 ≤ x < P], [0 ≤ y < N], [0 ≤ z < M], та [0 ≤ r < M⋅N⋅P], обчислюється за допомогою . Організувавши всі масиви з індексацією від одиниці ([1 ≤ x′ ≤ P], [1 ≤ y′ ≤ N], [1 ≤ z′ ≤ M], [1 ≤ r′ ≤ M⋅N⋅P]), і припускаючи аналогічний порядок елементів, дає для доступу до того ж елементу, що, можливо виглядає складніше. Звичайно, оскільки та Простим і повсякденним прикладом є позиційна нотація, яка стала можливою завдяки винаходу нуля. У позиційному записі десятки, сотні, тисячі та всі інші цифри починаються з нуля, тільки одиниці починаються з одиниці..
+ Індекси починаються з Нуля 0 1 2 .. .. 8 9 0 0 1 2 8 9 1 10 11 12 18 19 2 20 21 22 28 29 .. .. 8 80 81 82 88 89 9 90 91 92 98 99 Вміст таблиці представляє індекс . + Індекси починаються з Одиниці 1 2 3 .. .. 9 10 1 1 2 3 9 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 Вміст таблиці представляє індекс .
Така ситуація може призвести до певної плутанини в термінології. У схемі індексування на основі нуля першим елементом є «елемент номер нуль»; так само, дванадцятий елемент - "елемент номер одинадцять". Тому виникає аналогія від порядкових номерів до кількості пронумерованих предметів; найвищий індекс з n об’єктів буде і відноситься до n -го елемента. З цієї причини перший елемент іноді називають нульовим елементом, намагаючись уникнути плутанини.
Наука У математиці багато послідовностей чисел або поліномів індексуються цілими невід’ємними числами, наприклад, числа Бернуллі та числа Белла.
І в механіці, і в статистиці визначається нульовий момент, що представляє загальну масу у випадку фізичної щільності, або повну ймовірність, тобто одиницю, для розподілу ймовірностей.
Нульовий закон термодинаміки був сформульований після першого, другого і третього законів, але вважався більш фундаментальним, звідки і його назва.
У біології кажуть, що організм має інтенціональність нульового порядку, якщо він не виявляє «загалом жодного наміру». Це може включати ситуацію, коли генетично зумовлений фенотип організму призводить до користі для здоров’я, оскільки він не «має наміру» виражати свої гени. У подібному сенсі комп’ютер можна розглядати з цієї точки зору як інтенціональну сутність нульового порядку, оскільки він не «має наміру» виражати код програм, які він виконує.
У біологічних або медичних експериментах початкові вимірювання, зроблені до експериментального часу, вважаються зробленими у нульовий день експерименту.
У геноміці для координат геному використовуються системи як на основі 0, так і на основі 1.
Нульовий пацієнт (або індексний випадок ) є початковим пацієнтом у вибірці населення епідеміологічного дослідження.
Інші сфери Нульовий рік не існує ні в широко використовуваному григоріанському календарі, ні в його попереднику, юліанському календарі. За цими системами за 1 роком до нашої ери слідує 1 рік нашої ери. Проте в нумерації астрономічних років є нульовий рік (де він збігається з 1 юліанським роком до н.е.) і в ISO 8601:2004 (де він збігається з 1 григоріанським роком до н.е.), а також у всіх буддійських та індуїстських календарях.
У багатьох країнах перший поверх у будівлях вважається поверх номер 0, а не як "1-й поверх", умовність найменування, яка зазвичай зустрічається в Сполучених Штатах Америки. Це створює узгоджений набір із підземними поверхами, позначеними від’ємними числами.
Хоча порядковий номер 0 здебільшого використовується в спільнотах, безпосередньо пов’язаних з математикою, фізикою та інформатикою, є також випадки в класичній музиці. Композитор Антон Брукнер вважав свою ранню симфонію ре мінор негідною включення до канону своїх творів, і написав у рахунку («не враховується») і поставив закреслене коло, маючи на увазі «недійсний». Але посмертно цей твір став відомий як Симфонія № 0 ре мінор, хоча насправді вона була написана після Симфонія № 1 до мінор. Існує ще більш рання Симфонія фа мінор Брукнера, яку іноді називають Симфонія № 00 (Брукнер). Російський композитор Альфред Шнітке також написав Симфонію № 0.