Нумерация с нуля

редактировать
Отсчет от «0» вместо «1» сначала

Нумерация с нуля - это способ нумерация, в которой начальному элементу последовательности присваивается индекс 0, а не индекс 1, как это типично для повседневных нематематических или непрограммированных обстоятельства. При нумерации с отсчетом от нуля начальный элемент иногда называют нулевым элементом , а не первым элементом; ноль - это отчеканенное порядковое число, соответствующее числу ноль. В некоторых случаях объект или значение, которые (изначально) не принадлежат заданной последовательности, но которые естественным образом могут быть помещены перед ее начальным элементом, можно назвать нулевым элементом. Нет широкого согласия относительно правильности использования нуля в качестве порядкового номера (или относительно использования термина «ноль»), поскольку это создает неоднозначность для всех последующих элементов последовательности при отсутствии контекста.

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

Содержание
  • 1 Компьютерное программирование
    • 1.1 Источник
    • 1.2 Использование в языках программирования
    • 1.3 Числовые свойства
  • 2 Наука
  • 3 Другие поля
  • 4 См. Также
  • 5 Литература
Компьютерное программирование

Origin

Мартин Ричардс, создатель языка BCPL (предшественник C ), спроектировал массивы, запускаемые в 0 как естественная позиция для начала доступа к содержимому массива на языке, поскольку значение указателя p, используемого в качестве адреса, обращается к позиции p + 0 в памяти. Канадский системный аналитик Майк Хой спросил Ричардса о причинах выбора этого соглашения. BCPL был сначала скомпилирован для IBM 7094 ; в языке не было косвенного поиска во время времени выполнения, поэтому оптимизация косвенного обращения, обеспечиваемая этими массивами, использовалась во время компиляции. Тем не менее, оптимизация была важна.

Эдсгер В. Дейкстра позже написал соответствующую заметку Почему нумерация должна начинаться с нуля в 1982 году, анализируя возможные конструкции индексов массивов, заключая их в цепное неравенство, сочетая резкие и стандартные неравенства до четырех возможностей, демонстрирующих, что, по его убеждению, массивы с отсчетом от нуля лучше всего представлены неперекрывающимися диапазонами индексов, которые начинаются с нуля, ссылаясь на открытые, полуоткрытые и закрытые интервалы как с действительными числами. Критерии Дейкстры для предпочтения этого соглашения в деталях заключаются в том, что оно представляет пустые последовательности более естественным образом (a ≤ i < a ?) than closed "intervals" (a ≤ i ≤ (a−1) ?), and that with half-open "intervals" of naturals, the length of a sub-sequence equals the upper minus the lower bound (a ≤ i < b gives (b−a) possible values for i, with a, b, i all naturals).

Использование в языках программирования

Это использование следует из вариантов дизайна, встроенных во многие влиятельные программы программирования. языки, включая C, Java и Lisp. В этих трех типах последовательностей (массивы C, массивы и списки Java, списки и векторы Lisp) индексируются, начиная с нуля. нижний индекс. В частности, в C, где массивы тесно связаны с арифметикой указатель, это упрощает реализацию: нижний индекс относится к смещению от начальной позиции массива, поэтому первый элемент имеет смещение ноль.

Ссылка на память по адресу и смещению представлена ​​непосредственно в компьютерном оборудовании практически на всех компьютерных архитектурах, поэтому эта деталь конструкции в C упрощает компиляцию за счет некоторых человеческих ресурсов. факторов. В этом контексте использование "нуля" в качестве порядкового номера не является строго правильная, но распространенная привычка в этой профессии. Другие языки программирования, такие как Fortran или COBOL, имеют индексы массива, начинающиеся с единицы, потому что они предназначались как языки программирования высокого уровня, и как таковые они должен был соответствовать обычным порядковым номерам, которые задолго до изобретения нуля.

Pascal позволяет диапазону массива быть любого порядкового типа (включая перечисляемые типы). APL позволяет программно установить источник индекса на 0 или 1 во время выполнения. Некоторые недавние языки, такие как Lua и Visual Basic, приняли такое же соглашение по той же причине.

Ноль - это наименьшее целое число без знака, один из самых фундаментальных типов в программировании и проектировании оборудования. Таким образом, в информатике ноль часто используется как базовый случай для многих видов числовой рекурсии. Доказательства и другие виды математических рассуждений в информатике часто начинаются с нуля. По этим причинам в информатике нет ничего необычного в том, чтобы считать с нуля, а не с единицы.

Хакеры и компьютерщики часто любят называть первую главу публикации «Главой 0», особенно если она носит вводный характер. Один из классических примеров был в Первом издании KR. В последние годы эта черта также наблюдалась среди многих математиков, где многие конструкции нумеруются от 0.

Если массив используется для представления цикла, это удобно для получения индекса с помощью функции по модулю, которая может привести к нулю.

Числовые свойства

При нумерации с отсчетом от нуля диапазон может быть выражен как полуоткрытый интервал, [0, n), в отличие от замкнутого интервала., [1, n]. Пустые диапазоны, которые часто встречаются в алгоритмах, сложно выразить через закрытый интервал, не прибегая к тупым соглашениям вроде [1,0]. Благодаря этому свойству индексирование с нуля потенциально сокращает количество ошибок на единицу и заборных столбов. С другой стороны, количество повторений n вычисляется заранее, что делает использование подсчета от 0 до n-1 (включительно) менее интуитивным. Некоторые авторы предпочитают индексирование на основе одного, поскольку оно более точно соответствует тому, как индексируются объекты в других контекстах.

Другое свойство этого соглашения заключается в использовании модульной арифметики, реализованной в современных компьютерах.. Обычно функция по модулю отображает любое целое число по модулю N в одно из чисел 0, 1, 2,..., N - 1, где N ≥ 1. Из-за этого многие формулы в алгоритмах (например, как для вычисления индексов хеш-таблицы) может быть элегантно выражено в коде с помощью операции по модулю, когда индексы массива начинаются с нуля.

Операции с указателями также могут быть более элегантно выражены в индексе с отсчетом от нуля благодаря базовой логике адреса / смещения, упомянутой выше. Для иллюстрации предположим, что a - это адрес памяти первого элемента массива, а i - это индекс желаемого элемента. Чтобы вычислить адрес желаемого элемента, если номера индексов отсчитываются от 1, желаемый адрес вычисляется с помощью этого выражения:

a + s × (i - 1)

, где s - размер каждого элемента. Напротив, если числа индекса отсчитываются от 0, выражение становится:

a + s × i

Это более простое выражение более эффективно для вычисления во время времени выполнения.

Однако язык, желающий индексировать массивы из 1 могут принять соглашение, согласно которому каждый адрес массива представлен как a ′ = a - s; то есть вместо использования адреса первого элемента массива такой язык будет использовать адрес вымышленного элемента, расположенного непосредственно перед первым фактическим элементом. Выражение индексации для индекса, основанного на 1, тогда будет следующим:

a ′ + s × i

Следовательно, выигрыш в эффективности во время выполнения индексирования с нулевым отсчетом не является неотъемлемым, а является артефактом решения представляют собой массив с адресом его первого элемента, а не с адресом фиктивного нулевого элемента. Однако адрес этого фиктивного элемента вполне может быть адресом некоторого другого элемента в памяти, не связанного с массивом.

На первый взгляд фиктивный элемент плохо масштабируется для многомерных массивов. При индексировании многомерных массивов с нуля наивное (непрерывное) преобразование в линейное адресное пространство (систематическое изменение одного индекса за другим) выглядит проще, чем при индексировании с одного. Например, при отображении трехмерного массива A [P] [N] [M] {\ displaystyle \ mathrm {A} [P] [N] [M]}{\ displaystyle \ mathrm {A} [P] [N] [M]} на линейный массив L [M⋅N⋅P], оба с элементами M⋅N⋅P, индекс r в линейном массиве для доступа к конкретному элементу с L [r] = A [z] [y] [x] в нуле- индексирование на основе, то есть [0 ≤ x < P], [0 ≤ y < N], [0 ≤ z < M], and [0 ≤ r < M⋅N⋅P], is calculated by r = z⋅M⋅N + y⋅M + x. Organizing all arrays with 1-based indices ([1 ≤ x′ ≤ P], [1 ≤ y′ ≤ N], [1 ≤ z′ ≤ M], [1 ≤ r′ ≤ M⋅N⋅P]), and assuming an analogous arrangement of the elements, gives r′ = (z′ − 1)⋅M⋅N + (y′ − 1)⋅M + (x′ − 0) to access the same element, which arguably looks more complicated. Of course, r' = r + 1, since [z = z′ – 1], [y = y′ – 1], and [x = x′ – 1]. A simple and everyday life example is позиционная нотация, что сделало возможным изобретение нуля. В позиционном обозначении десятки, сотни, тысячи и все другие цифры начинаются с нуля, только единицы начинаются с единицы.

  • Отсчитываемые от нуля индексы
    xy012..x = x ′ - 1 {\ displaystyle x = x'-1}{\displaystyle x=x'-1}..89
    00001020809
    11011121819
    22021222829
    ..
    y = y ′ - 1 {\ displaystyle y = y'-1}{\displaystyle y=y'-1}y ⋅ M + x {\ displaystyle y \ cdot M + x}{\ displaystyle y \ cdot M + x}
    ..
    88081828889
    99091929899
    Содержимое таблицы представляет собой индекс r
  • Индексы, отсчитываемые от единицы
    x'y '123..x ′ = x + 1 {\ displaystyle х '= х + 1}{\displaystyle x'=x+1}..910
    10102030910
    21112131920
    32122232930
    ..
    y' = y + 1 {\ displaystyle y '= y + 1}{\displaystyle y'=y+1}(y ′ - 1) ⋅ M + x ′ {\ displaystyle (y'-1) \ cdot M + x '}{\displaystyle (y'-1)\cdot M+x'}
    ..
    98182838990
    1091929399100
    Содержимое таблицы представляет индекс r '

Эта ситуация может привести к некоторой путанице в терминологии. В схеме индексации с отсчетом от нуля первым элементом является «элемент с нулевым номером»; аналогично, двенадцатый элемент - это «элемент номер одиннадцать». Следовательно, появляется аналогия порядковых номеров количеству пронумерованных объектов; наивысший индекс из n объектов будет n - 1 и относится к n-му элементу. По этой причине первый элемент иногда называют нулевым элементом , чтобы избежать путаницы.

Наука

В математике многие последовательности чисел или многочленов индексируются неотрицательными целыми числами, например числами Бернулли и числа звонка.

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

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

В биологии считается, что организм обладает интенциональностью нулевого порядка, если он не проявляет «никакого намерения вообще ни к чему». Это может включать ситуацию, когда генетически предопределенный фенотип организма приводит к улучшению приспособленности для него самого, потому что он не «намеревался» экспрессировать свои гены. В аналогичном смысле компьютер может рассматриваться с этой точки зрения преднамеренной сущностью нулевого порядка, поскольку он не «намеревается» выражать код программ, которые он запускает.

В биологических или медицинских экспериментах производились первоначальные измерения до того, как пройдет какое-либо экспериментальное время, говорят, что наступил нулевой день эксперимента.

В геномике для координат генома используются системы, начинающиеся с 0 и 1.

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

Другие поля

нулевой год не существует в широко используемом григорианском календаре или в его предшественнике, юлианском календаре. Согласно этим системам, за годом 1 г. до н.э. следует 1 г. н.э.. Однако есть нулевой год в астрономическом году с нумерацией (где он совпадает с юлианским годом 1 г. до н.э.) и в ISO 8601: 2004 (где он совпадает с григорианским годом 1 г. до н.э.).), а также во всех буддийских и индуистских календарях.

Во многих странах первый этаж в зданиях считается этажом с номером 0, а не "1-м этажом". ", соглашение об именах, обычно применяемое в Соединенных Штатах Америки. Это составляет единый комплекс с подземными этажами, отмеченными отрицательными числами.

Хотя порядковый номер 0 в основном используется в сообществах, непосредственно связанных с математикой, физикой и информатикой, есть примеры и в классической музыке. Композитор Антон Брукнер счел свою раннюю Симфонию ре минор недостойной включения в канон своих произведений и написал на партитуре и круге с перекладиной «позолоченный никт», имея в виду "инвалид". Но посмертно это произведение стало известно как Симфония № 0 до минор, хотя на самом деле оно было написано после Симфонии № 1 до минор. Есть еще более ранняя Симфония фа минор Брукнера, которую иногда называют No. 00. Русский композитор Альфред Шнитке также написал Симфонию № 0.

В некоторых университетах, в том числе в Оксфорде и Кембридже, «неделя 0» или иногда «нулевая неделя» относится к неделе перед первой. неделя лекций в семестре. В Австралии некоторые университеты называют это «неделей O», что является каламбуром на «ориентационной неделе ». Параллельно с этим вводные недели в университетах Швеции обычно называются «nollning» (обнуление).

ВВС США начинают базовую подготовку каждую среду, а первая неделя (из восьми) считается началом следующего воскресенья. Четыре дня до этого воскресенья часто называют «нулевой неделей».

24-часовые часы и международный стандарт ISO 8601 используют 0 для обозначения первого (нулевого) часа дня.

вокзал Кингс-Кросс в Лондоне, Эдинбург, Хеймаркет и станции в Уппсале, Йонаго, Стокпорт и У Кардиффа есть Платформа 0.

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

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

Ноль иногда используется в почтовых адресах, особенно в схемах, где четные числа - одна сторона улицы, а нечетные. числа с другой. В качестве примера можно привести ориентир Christ Church Cambridge на Cambridge, Massachusetts на Harvard Square, адрес которого: 0 Garden Street.

В Формуле-1, когда действующий чемпион мира не участвует в соревнованиях в следующем сезоне, номер 1 не присваивается ни одному из пилотов, но один гонщик из команды чемпиона мира будет иметь номер 0, а другой, номер 2. Это произошло как в 1993, так и в 1994 году, когда Дэймон Хилл имел номер 0 в обоих сезонах, поскольку действующий чемпион Найджел Мэнселл ушел после 1992 года, а действующий чемпион Ален Прост ушел после 1993 года.

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

Швейцарские федеральные железные дороги нумеруют определенные классы подвижного состава с нуля, для Например, Re 460 000 к 118.

В сфере художественной литературы Айзек Азимов в конце концов добавил нулевой закон к своим Трех законам робототехники, по сути сделав им четыре закона.

См. Также
Ссылки
Последняя правка сделана 2021-06-23 08:37:02
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте