numérotation où le premier élément d'une séquence se voit attribuer l' indice 0, contrairement à l'indice 1 généralement utilisé dans le langage courant. Dans ce système, le premier élément est parfois appelé « élément zéro » plutôt que « premier élément » ; « zéro » est un néologisme désignant le nombre ordinal zéro. Il arrive qu'un objet ou une valeur n'appartenant pas (initialement) à une séquence donnée, mais pouvant être naturellement placé avant son élément initial, soit appelé « élément zéro ». L'utilisation de zéro comme nombre ordinal (ainsi que celle du terme « zéro » ) ne fait pas l'objet d'un consensus , car elle peut engendrer une ambiguïté pour les éléments suivants de la séquence en l'absence de contexte.
L'utilisation de la numérotation à partir de 0 est courante en mathématiques, notamment en combinatoire , bien que les langages de programmation mathématique indexent généralement à partir de 1. En informatique , les indices des tableaux commencent généralement à 0 dans les langages de programmation modernes ; les programmeurs peuvent donc utiliser « zéroième » là où d'autres utiliseraient « premier » , et ainsi de suite. Dans certains contextes mathématiques, la numérotation à partir de zéro est acceptable lorsque les formes ordinales ont une signification bien établie et qu'un élément évident précède « premier » ; par exemple, la dérivée zéro d'une fonction est la fonction elle-même, obtenue en la dérivant zéro fois. Cet usage revient à nommer un élément qui n'appartient pas à proprement parler à la suite, mais qui la précède : la dérivée zéro n'est pas réellement une dérivée. Cependant, tout comme la dérivée première précède la dérivée seconde , la dérivée zéro (ou la fonction originale elle-même) précède également la dérivée première .
Martin Richards , créateur du langage BCPL (précurseur du C ), a conçu des tableaux initialisés à 0 comme point de départ naturel pour accéder à leur contenu, car la valeur d'un pointeur p utilisé comme adresse accède à la position IBM 7094 ; le langage n'introduisait pas de recherches indirectes à l'exécution , l'optimisation de l'indirection fournie par ces tableaux était donc effectuée à la compilation. Cette optimisation était néanmoins importante.En 1982, Edsger W. Dijkstra, dans sa note pertinente « Pourquoi la numérotation devrait commencer à zéro » a soutenu que les indices des tableaux devraient commencer à zéro, car il s'agit du nombre le plus naturel . Il a examiné différentes configurations possibles d'intervalles de tableaux en les intégrant dans une chaîne d'inégalités, combinant inégalités strictes et standard pour aboutir à quatre possibilités. Il a ainsi démontré que, selon lui, les tableaux indexés à partir de zéro sont mieux représentés par des intervalles d'indices non chevauchants, commençant à zéro, évoquant les intervalles ouverts, semi-ouverts et fermés, comme pour les nombres réels. Les critères de Dijkstra pour préférer cette convention sont en détail qu'elle représente les séquences vides d'une manière plus naturelle langages de programmation influents , tels que C , Java et Lisp . Dans ces trois langages, les types de séquences (tableaux en C, tableaux et listes en Java, listes et vecteurs en Lisp) sont indexés à partir de l'indice zéro. En C notamment, où les tableaux sont étroitement liés à l'arithmétique des pointeurs , cela simplifie l'implémentation : l'indice correspond à un décalage par rapport à la position de départ du tableau, le premier élément ayant ainsi un indice zéro.
Le référencement de la mémoire par une adresse et un décalage est directement implémenté dans le matériel informatique sur la quasi-totalité des architectures. Ce détail de conception en C facilite donc la compilation, au prix de certaines erreurs humaines. Dans ce contexte, l'utilisation de « zéro » comme ordinal n'est pas strictement correcte, mais reste une pratique courante. Certains langages de programmation, comme Fortran ou COBOL , utilisent l'indice 1 pour les tableaux, car ce sont des langages de haut niveau qui devaient correspondre aux nombres ordinaux usuels , antérieurs de loin à l' invention du zéro . D'autres langages, comme Ada , ALGOL 60 et PL/I , autorisent une borne inférieure arbitraire pour chaque indice.
Pascal autorise les valeurs d'un tableau de n'importe quel type ordinal (y compris les types énumérés), et Ada autorise tout sous-type discret. APL permet de définir l'origine des indices à 0 ou 1 par programmation lors de l'exécution. Des langages plus récents, tels que Lua et Visual Basic , ont adopté la même convention pour la même raison.
Zéro est la plus petite valeur entière non signée, un type fondamental en programmation et en conception matérielle. En informatique, zéro est donc souvent utilisé comme cas de base pour de nombreux types de récursivité numérique . Les démonstrations et autres raisonnements mathématiques en informatique commencent souvent par zéro. C'est pourquoi, en informatique, il est courant de numéroter à partir de zéro plutôt que de un.
Si un tableau est utilisé pour représenter un cycle, il est pratique d'obtenir l'indice avec une fonction modulo , qui peut donner zéro.
Propriétés numériques
Avec une numérotation à partir de zéro, un intervalle peut être exprimé comme l' intervalle semi-ouvert [ les erreurs de décalage d'une unité et les erreurs de point de repère . En revanche, le nombre de répétitions l'arithmétique modulaire telle qu'implémentée dans les ordinateurs modernes. Généralement, la fonction modulo associe à tout entier modulo adresse mémoire du premier élément d'un tableau et